Data Exploration and Wrangling
The first step in performing a machine learning analysis is to explore the data to better understand the variables included in the data, as we may learn about important details about the data that we should keep in mind as we try to predict our outcome variable.
First let’s just get a general sense of our data. We can do that using the glimpse() function of the dplyr package (it is also in the tibble package).
We will also use the %>% pipe which can be used to define the input for later sequential steps. This will make more sense when we have multiple sequential steps using the same data object. To use the pipe notation we need to install and load dplyr as well.
For example here we will first grab the pm data object, then we use the glimpse() function on it based on the pipe notation.
Observations: 876
Variables: 50
$ id <dbl> 1003.001, 1027.000, 1033.100, 1049.1…
$ value <dbl> 9.597647, 10.800000, 11.212174, 11.6…
$ fips <dbl> 1003, 1027, 1033, 1049, 1055, 1069, …
$ lat <dbl> 30.49800, 33.28126, 34.75878, 34.287…
$ lon <dbl> -87.88141, -85.80218, -87.65056, -85…
$ state <chr> "Alabama", "Alabama", "Alabama", "Al…
$ county <chr> "Baldwin", "Clay", "Colbert", "DeKal…
$ city <chr> "Fairhope", "Ashland", "Muscle Shoal…
$ CMAQ <dbl> 8.098836, 9.766208, 9.402679, 8.5347…
$ zcta <dbl> 36532, 36251, 35660, 35962, 35901, 3…
$ zcta_area <dbl> 190980522, 374132430, 16716984, 2038…
$ zcta_pop <dbl> 27829, 5103, 9042, 8300, 20045, 3021…
$ imp_a500 <dbl> 0.01730104, 1.96972318, 19.17301038,…
$ imp_a1000 <dbl> 1.4096021, 0.8531574, 11.1448962, 3.…
$ imp_a5000 <dbl> 3.3360118, 0.9851479, 15.1786154, 1.…
$ imp_a10000 <dbl> 1.9879187, 0.5208189, 9.7253870, 1.0…
$ imp_a15000 <dbl> 1.4386207, 0.3359198, 5.2472094, 0.9…
$ county_area <dbl> 4117521611, 1564252280, 1534877333, …
$ county_pop <dbl> 182265, 13932, 54428, 71109, 104430,…
$ log_dist_to_prisec <dbl> 4.648181, 7.219907, 5.760131, 3.7214…
$ log_pri_length_5000 <dbl> 8.517193, 8.517193, 8.517193, 8.5171…
$ log_pri_length_10000 <dbl> 9.210340, 9.210340, 9.274303, 10.409…
$ log_pri_length_15000 <dbl> 9.630228, 9.615805, 9.658899, 11.173…
$ log_pri_length_25000 <dbl> 11.32735, 10.12663, 10.15769, 11.909…
$ log_prisec_length_500 <dbl> 7.295356, 6.214608, 8.611945, 7.3101…
$ log_prisec_length_1000 <dbl> 8.195119, 7.600902, 9.735569, 8.5858…
$ log_prisec_length_5000 <dbl> 10.815042, 10.170878, 11.770407, 10.…
$ log_prisec_length_10000 <dbl> 11.88680, 11.40554, 12.84066, 11.508…
$ log_prisec_length_15000 <dbl> 12.205723, 12.042963, 13.282656, 12.…
$ log_prisec_length_25000 <dbl> 13.41395, 12.79980, 13.79973, 13.559…
$ log_nei_2008_pm25_sum_10000 <dbl> 0.318035438, 3.218632928, 6.57312730…
$ log_nei_2008_pm25_sum_15000 <dbl> 1.967358961, 3.218632928, 6.58191745…
$ log_nei_2008_pm25_sum_25000 <dbl> 5.067308, 3.218633, 6.875900, 4.8876…
$ log_nei_2008_pm10_sum_10000 <dbl> 1.35588511, 3.31111648, 6.69187313, …
$ log_nei_2008_pm10_sum_15000 <dbl> 2.26783411, 3.31111648, 6.70127741, …
$ log_nei_2008_pm10_sum_25000 <dbl> 5.628728, 3.311116, 7.148858, 5.1719…
$ popdens_county <dbl> 44.265706, 8.906492, 35.460814, 35.3…
$ popdens_zcta <dbl> 145.716431, 13.639555, 540.887040, 4…
$ nohs <dbl> 3.3, 11.6, 7.3, 14.3, 4.3, 5.8, 7.1,…
$ somehs <dbl> 4.9, 19.1, 15.8, 16.7, 13.3, 11.6, 1…
$ hs <dbl> 25.1, 33.9, 30.6, 35.0, 27.8, 29.8, …
$ somecollege <dbl> 19.7, 18.8, 20.9, 14.9, 29.2, 21.4, …
$ associate <dbl> 8.2, 8.0, 7.6, 5.5, 10.1, 7.9, 7.3, …
$ bachelor <dbl> 25.3, 5.5, 12.7, 7.9, 10.0, 13.7, 5.…
$ grad <dbl> 13.5, 3.1, 5.1, 5.8, 5.4, 9.8, 2.0, …
$ pov <dbl> 6.1, 19.5, 19.0, 13.8, 8.8, 15.6, 25…
$ hs_orless <dbl> 33.3, 64.6, 53.7, 66.0, 45.4, 47.2, …
$ urc2013 <dbl> 4, 6, 4, 6, 4, 4, 1, 1, 1, 1, 1, 1, …
$ urc2006 <dbl> 5, 6, 4, 5, 4, 4, 1, 1, 1, 1, 1, 1, …
$ aod <dbl> 37.36364, 34.81818, 36.00000, 33.083…
We can see that there are 876 monitors and that we have 50 total variables - one of which is the outcome. In this case our outcome variable is called value.
Notice that some of the variables that we would think of as factors (categorical) are currently of class double as indicated by the <dbl> just to the right of the column names/variable names in the glimpse() output. For example the monitor ID (id), the Federal Information Processing Standard number for the county where the monitor was located (fips), as well as the zcta
Let’s convert these variables into factors. We can do this using the mutate_at() function of the dplyr package and the as.factor() base function.
In this case we are also using the magrittr assignment pipe or double pipe that looks like this %<>% of the magrittr package. This allows us use the pm data as input but also reassign the output to the same data object name.
Observations: 876
Variables: 50
$ id <fct> 1003.001, 1027.0001, 1033.1002, 1049…
$ value <dbl> 9.597647, 10.800000, 11.212174, 11.6…
$ fips <fct> 1003, 1027, 1033, 1049, 1055, 1069, …
$ lat <dbl> 30.49800, 33.28126, 34.75878, 34.287…
$ lon <dbl> -87.88141, -85.80218, -87.65056, -85…
$ state <chr> "Alabama", "Alabama", "Alabama", "Al…
$ county <chr> "Baldwin", "Clay", "Colbert", "DeKal…
$ city <chr> "Fairhope", "Ashland", "Muscle Shoal…
$ CMAQ <dbl> 8.098836, 9.766208, 9.402679, 8.5347…
$ zcta <fct> 36532, 36251, 35660, 35962, 35901, 3…
$ zcta_area <dbl> 190980522, 374132430, 16716984, 2038…
$ zcta_pop <dbl> 27829, 5103, 9042, 8300, 20045, 3021…
$ imp_a500 <dbl> 0.01730104, 1.96972318, 19.17301038,…
$ imp_a1000 <dbl> 1.4096021, 0.8531574, 11.1448962, 3.…
$ imp_a5000 <dbl> 3.3360118, 0.9851479, 15.1786154, 1.…
$ imp_a10000 <dbl> 1.9879187, 0.5208189, 9.7253870, 1.0…
$ imp_a15000 <dbl> 1.4386207, 0.3359198, 5.2472094, 0.9…
$ county_area <dbl> 4117521611, 1564252280, 1534877333, …
$ county_pop <dbl> 182265, 13932, 54428, 71109, 104430,…
$ log_dist_to_prisec <dbl> 4.648181, 7.219907, 5.760131, 3.7214…
$ log_pri_length_5000 <dbl> 8.517193, 8.517193, 8.517193, 8.5171…
$ log_pri_length_10000 <dbl> 9.210340, 9.210340, 9.274303, 10.409…
$ log_pri_length_15000 <dbl> 9.630228, 9.615805, 9.658899, 11.173…
$ log_pri_length_25000 <dbl> 11.32735, 10.12663, 10.15769, 11.909…
$ log_prisec_length_500 <dbl> 7.295356, 6.214608, 8.611945, 7.3101…
$ log_prisec_length_1000 <dbl> 8.195119, 7.600902, 9.735569, 8.5858…
$ log_prisec_length_5000 <dbl> 10.815042, 10.170878, 11.770407, 10.…
$ log_prisec_length_10000 <dbl> 11.88680, 11.40554, 12.84066, 11.508…
$ log_prisec_length_15000 <dbl> 12.205723, 12.042963, 13.282656, 12.…
$ log_prisec_length_25000 <dbl> 13.41395, 12.79980, 13.79973, 13.559…
$ log_nei_2008_pm25_sum_10000 <dbl> 0.318035438, 3.218632928, 6.57312730…
$ log_nei_2008_pm25_sum_15000 <dbl> 1.967358961, 3.218632928, 6.58191745…
$ log_nei_2008_pm25_sum_25000 <dbl> 5.067308, 3.218633, 6.875900, 4.8876…
$ log_nei_2008_pm10_sum_10000 <dbl> 1.35588511, 3.31111648, 6.69187313, …
$ log_nei_2008_pm10_sum_15000 <dbl> 2.26783411, 3.31111648, 6.70127741, …
$ log_nei_2008_pm10_sum_25000 <dbl> 5.628728, 3.311116, 7.148858, 5.1719…
$ popdens_county <dbl> 44.265706, 8.906492, 35.460814, 35.3…
$ popdens_zcta <dbl> 145.716431, 13.639555, 540.887040, 4…
$ nohs <dbl> 3.3, 11.6, 7.3, 14.3, 4.3, 5.8, 7.1,…
$ somehs <dbl> 4.9, 19.1, 15.8, 16.7, 13.3, 11.6, 1…
$ hs <dbl> 25.1, 33.9, 30.6, 35.0, 27.8, 29.8, …
$ somecollege <dbl> 19.7, 18.8, 20.9, 14.9, 29.2, 21.4, …
$ associate <dbl> 8.2, 8.0, 7.6, 5.5, 10.1, 7.9, 7.3, …
$ bachelor <dbl> 25.3, 5.5, 12.7, 7.9, 10.0, 13.7, 5.…
$ grad <dbl> 13.5, 3.1, 5.1, 5.8, 5.4, 9.8, 2.0, …
$ pov <dbl> 6.1, 19.5, 19.0, 13.8, 8.8, 15.6, 25…
$ hs_orless <dbl> 33.3, 64.6, 53.7, 66.0, 45.4, 47.2, …
$ urc2013 <dbl> 4, 6, 4, 6, 4, 4, 1, 1, 1, 1, 1, 1, …
$ urc2006 <dbl> 5, 6, 4, 5, 4, 4, 1, 1, 1, 1, 1, 1, …
$ aod <dbl> 37.36364, 34.81818, 36.00000, 33.083…
Great! Now we can see that these variables are now factors as indicated by <fct> after the variable name.
The skim() function of the skimr package is also really helpful for getting a general sense of your data.
Data summary
| Name |
pm |
| Number of rows |
876 |
| Number of columns |
50 |
| _______________________ |
|
| Column type frequency: |
|
| character |
3 |
| factor |
3 |
| numeric |
44 |
| ________________________ |
|
| Group variables |
None |
Variable type: character
| state |
0 |
1 |
4 |
20 |
0 |
49 |
0 |
| county |
0 |
1 |
3 |
20 |
0 |
471 |
0 |
| city |
0 |
1 |
4 |
48 |
0 |
607 |
0 |
Variable type: factor
| id |
0 |
1 |
FALSE |
876 |
100: 1, 102: 1, 103: 1, 104: 1 |
| fips |
0 |
1 |
FALSE |
569 |
170: 12, 603: 10, 261: 9, 107: 8 |
| zcta |
0 |
1 |
FALSE |
842 |
475: 3, 110: 2, 160: 2, 290: 2 |
Variable type: numeric
| value |
0 |
1 |
10.81 |
2.580000e+00 |
3.02 |
9.27 |
11.15 |
12.37 |
2.316000e+01 |
▂▆▇▁▁ |
| lat |
0 |
1 |
38.48 |
4.620000e+00 |
25.47 |
35.03 |
39.30 |
41.66 |
4.840000e+01 |
▁▃▅▇▂ |
| lon |
0 |
1 |
-91.74 |
1.496000e+01 |
-124.18 |
-99.16 |
-87.47 |
-80.69 |
-6.804000e+01 |
▃▂▃▇▃ |
| CMAQ |
0 |
1 |
8.41 |
2.970000e+00 |
1.63 |
6.53 |
8.62 |
10.24 |
2.313000e+01 |
▃▇▃▁▁ |
| zcta_area |
0 |
1 |
183173481.91 |
5.425989e+08 |
15459.00 |
14204601.75 |
37653560.50 |
160041508.25 |
8.164821e+09 |
▇▁▁▁▁ |
| zcta_pop |
0 |
1 |
24227.58 |
1.777216e+04 |
0.00 |
9797.00 |
22014.00 |
35004.75 |
9.539700e+04 |
▇▇▃▁▁ |
| imp_a500 |
0 |
1 |
24.72 |
1.934000e+01 |
0.00 |
3.70 |
25.12 |
40.22 |
6.961000e+01 |
▇▅▆▃▂ |
| imp_a1000 |
0 |
1 |
24.26 |
1.802000e+01 |
0.00 |
5.32 |
24.53 |
38.59 |
6.750000e+01 |
▇▅▆▃▁ |
| imp_a5000 |
0 |
1 |
19.93 |
1.472000e+01 |
0.05 |
6.79 |
19.07 |
30.11 |
7.460000e+01 |
▇▆▃▁▁ |
| imp_a10000 |
0 |
1 |
15.82 |
1.381000e+01 |
0.09 |
4.54 |
12.36 |
24.17 |
7.209000e+01 |
▇▃▂▁▁ |
| imp_a15000 |
0 |
1 |
13.43 |
1.312000e+01 |
0.11 |
3.24 |
9.67 |
20.55 |
7.110000e+01 |
▇▃▁▁▁ |
| county_area |
0 |
1 |
3768701992.12 |
6.212830e+09 |
33703512.00 |
1116536297.50 |
1690826566.50 |
2878192209.00 |
5.194723e+10 |
▇▁▁▁▁ |
| county_pop |
0 |
1 |
687298.44 |
1.293489e+06 |
783.00 |
100948.00 |
280730.50 |
743159.00 |
9.818605e+06 |
▇▁▁▁▁ |
| log_dist_to_prisec |
0 |
1 |
6.19 |
1.410000e+00 |
-1.46 |
5.43 |
6.36 |
7.15 |
1.045000e+01 |
▁▁▃▇▁ |
| log_pri_length_5000 |
0 |
1 |
9.82 |
1.080000e+00 |
8.52 |
8.52 |
10.05 |
10.73 |
1.205000e+01 |
▇▂▆▅▂ |
| log_pri_length_10000 |
0 |
1 |
10.92 |
1.130000e+00 |
9.21 |
9.80 |
11.17 |
11.83 |
1.302000e+01 |
▇▂▇▇▃ |
| log_pri_length_15000 |
0 |
1 |
11.50 |
1.150000e+00 |
9.62 |
10.87 |
11.72 |
12.40 |
1.359000e+01 |
▆▂▇▇▃ |
| log_pri_length_25000 |
0 |
1 |
12.24 |
1.100000e+00 |
10.13 |
11.69 |
12.46 |
13.05 |
1.436000e+01 |
▅▃▇▇▃ |
| log_prisec_length_500 |
0 |
1 |
6.99 |
9.500000e-01 |
6.21 |
6.21 |
6.21 |
7.82 |
9.400000e+00 |
▇▁▂▂▁ |
| log_prisec_length_1000 |
0 |
1 |
8.56 |
7.900000e-01 |
7.60 |
7.60 |
8.66 |
9.20 |
1.047000e+01 |
▇▅▆▃▁ |
| log_prisec_length_5000 |
0 |
1 |
11.28 |
7.800000e-01 |
8.52 |
10.91 |
11.42 |
11.83 |
1.278000e+01 |
▁▁▃▇▃ |
| log_prisec_length_10000 |
0 |
1 |
12.41 |
7.300000e-01 |
9.21 |
11.99 |
12.53 |
12.94 |
1.385000e+01 |
▁▁▃▇▅ |
| log_prisec_length_15000 |
0 |
1 |
13.03 |
7.200000e-01 |
9.62 |
12.59 |
13.13 |
13.57 |
1.441000e+01 |
▁▁▃▇▅ |
| log_prisec_length_25000 |
0 |
1 |
13.82 |
7.000000e-01 |
10.13 |
13.38 |
13.92 |
14.35 |
1.523000e+01 |
▁▁▃▇▆ |
| log_nei_2008_pm25_sum_10000 |
0 |
1 |
3.97 |
2.350000e+00 |
0.00 |
2.15 |
4.29 |
5.69 |
9.120000e+00 |
▆▅▇▆▂ |
| log_nei_2008_pm25_sum_15000 |
0 |
1 |
4.72 |
2.250000e+00 |
0.00 |
3.47 |
5.00 |
6.35 |
9.420000e+00 |
▃▃▇▇▂ |
| log_nei_2008_pm25_sum_25000 |
0 |
1 |
5.67 |
2.110000e+00 |
0.00 |
4.66 |
5.91 |
7.28 |
9.650000e+00 |
▂▂▇▇▃ |
| log_nei_2008_pm10_sum_10000 |
0 |
1 |
4.35 |
2.320000e+00 |
0.00 |
2.69 |
4.62 |
6.07 |
9.340000e+00 |
▅▅▇▇▂ |
| log_nei_2008_pm10_sum_15000 |
0 |
1 |
5.10 |
2.180000e+00 |
0.00 |
3.87 |
5.39 |
6.72 |
9.710000e+00 |
▂▃▇▇▂ |
| log_nei_2008_pm10_sum_25000 |
0 |
1 |
6.07 |
2.010000e+00 |
0.00 |
5.10 |
6.37 |
7.52 |
9.880000e+00 |
▁▂▆▇▃ |
| popdens_county |
0 |
1 |
551.76 |
1.711510e+03 |
0.26 |
40.77 |
156.67 |
510.81 |
2.682191e+04 |
▇▁▁▁▁ |
| popdens_zcta |
0 |
1 |
1279.66 |
2.757490e+03 |
0.00 |
101.15 |
610.35 |
1382.52 |
3.041884e+04 |
▇▁▁▁▁ |
| nohs |
0 |
1 |
6.99 |
7.210000e+00 |
0.00 |
2.70 |
5.10 |
8.80 |
1.000000e+02 |
▇▁▁▁▁ |
| somehs |
0 |
1 |
10.17 |
6.200000e+00 |
0.00 |
5.90 |
9.40 |
13.90 |
7.220000e+01 |
▇▂▁▁▁ |
| hs |
0 |
1 |
30.32 |
1.140000e+01 |
0.00 |
23.80 |
30.75 |
36.10 |
1.000000e+02 |
▂▇▂▁▁ |
| somecollege |
0 |
1 |
21.58 |
8.600000e+00 |
0.00 |
17.50 |
21.30 |
24.70 |
1.000000e+02 |
▆▇▁▁▁ |
| associate |
0 |
1 |
7.13 |
4.010000e+00 |
0.00 |
4.90 |
7.10 |
8.80 |
7.140000e+01 |
▇▁▁▁▁ |
| bachelor |
0 |
1 |
14.90 |
9.710000e+00 |
0.00 |
8.80 |
12.95 |
19.22 |
1.000000e+02 |
▇▂▁▁▁ |
| grad |
0 |
1 |
8.91 |
8.650000e+00 |
0.00 |
3.90 |
6.70 |
11.00 |
1.000000e+02 |
▇▁▁▁▁ |
| pov |
0 |
1 |
14.95 |
1.133000e+01 |
0.00 |
6.50 |
12.10 |
21.22 |
6.590000e+01 |
▇▅▂▁▁ |
| hs_orless |
0 |
1 |
47.48 |
1.675000e+01 |
0.00 |
37.92 |
48.65 |
59.10 |
1.000000e+02 |
▁▃▇▃▁ |
| urc2013 |
0 |
1 |
2.92 |
1.520000e+00 |
1.00 |
2.00 |
3.00 |
4.00 |
6.000000e+00 |
▇▅▃▂▁ |
| urc2006 |
0 |
1 |
2.97 |
1.520000e+00 |
1.00 |
2.00 |
3.00 |
4.00 |
6.000000e+00 |
▇▅▃▂▁ |
| aod |
0 |
1 |
43.70 |
1.956000e+01 |
5.00 |
31.66 |
40.17 |
49.67 |
1.430000e+02 |
▃▇▁▁▁ |
Notice how there is a column called n_missing about the number of values that are missing. It looks like our data is very complete and we do not have any missing data. This is also indicated by the complete_rate variable, which shows the ratio of completeness, in our case all variables have a value of 1 indicating they are fully complete.
The n_unqiue column shows us the number of unique values for each of our columns. We can see that there are 49 states represented in the data, and we know that the data should be of the contiguous states. Let’s take a look to see which states are included:
Looks like “District of Columbia” is being included as a state. We can see that indeed Alaska and Hawaii are not included in the data.
Here is another method of looking at the data using the dfSummary() function of the summarytoolspackage. We need to copy and paste the output into the rmarkdown.
Dimensions: 876 x 50
Duplicates: 0
| 1 |
id
[factor] |
1. 1003.001
2. 1027.0001
3. 1033.1002
4. 1049.1003
5. 1055.001
6. 1069.0003
7. 1073.0023
8. 1073.1005
9. 1073.1009
10. 1073.101
[ 866 others ] |
1 ( 0.1%)
1 ( 0.1%)
1 ( 0.1%)
1 ( 0.1%)
1 ( 0.1%)
1 ( 0.1%)
1 ( 0.1%)
1 ( 0.1%)
1 ( 0.1%)
1 ( 0.1%)
866 (98.9%) |
 |
876
(100%) |
0
(0%) |
| 2 |
value
[numeric] |
Mean (sd) : 10.8 (2.6)
min < med < max:
3 < 11.2 < 23.2
IQR (CV) : 3.1 (0.2) |
875 distinct values |
 |
876
(100%) |
0
(0%) |
| 3 |
fips
[factor] |
1. 1003
2. 1027
3. 1033
4. 1049
5. 1055
6. 1069
7. 1073
8. 1089
9. 1097
10. 1101
[ 559 others ] |
1 ( 0.1%)
1 ( 0.1%)
1 ( 0.1%)
1 ( 0.1%)
1 ( 0.1%)
1 ( 0.1%)
8 ( 0.9%)
1 ( 0.1%)
2 ( 0.2%)
1 ( 0.1%)
858 (98.0%) |
 |
876
(100%) |
0
(0%) |
| 4 |
lat
[numeric] |
Mean (sd) : 38.5 (4.6)
min < med < max:
25.5 < 39.3 < 48.4
IQR (CV) : 6.6 (0.1) |
876 distinct values |
 |
876
(100%) |
0
(0%) |
| 5 |
lon
[numeric] |
Mean (sd) : -91.7 (15)
min < med < max:
-124.2 < -87.5 < -68
IQR (CV) : 18.5 (-0.2) |
876 distinct values |
 |
876
(100%) |
0
(0%) |
| 6 |
state
[character] |
1. California
2. Ohio
3. Illinois
4. Indiana
5. North Carolina
6. Pennsylvania
7. Michigan
8. Florida
9. Georgia
10. Texas
[ 39 others ] |
85 ( 9.7%)
44 ( 5.0%)
38 ( 4.3%)
36 ( 4.1%)
35 ( 4.0%)
32 ( 3.7%)
30 ( 3.4%)
29 ( 3.3%)
28 ( 3.2%)
27 ( 3.1%)
492 (56.2%) |
 |
876
(100%) |
0
(0%) |
| 7 |
county
[character] |
1. Jefferson
2. Cook
3. Hamilton
4. Lake
5. Los Angeles
6. Wayne
7. Washington
8. Cuyahoga
9. Jackson
10. Madison
[ 461 others ] |
18 ( 2.1%)
12 ( 1.4%)
11 ( 1.3%)
11 ( 1.3%)
10 ( 1.1%)
10 ( 1.1%)
9 ( 1.0%)
7 ( 0.8%)
7 ( 0.8%)
7 ( 0.8%)
774 (88.4%) |
 |
876
(100%) |
0
(0%) |
| 8 |
city
[character] |
1. Not in a city
2. New York
3. Cleveland
4. Baltimore
5. Chicago
6. Detroit
7. Milwaukee
8. New Haven
9. Philadelphia
10. Springfield
[ 597 others ] |
103 (11.8%)
9 ( 1.0%)
6 ( 0.7%)
5 ( 0.6%)
5 ( 0.6%)
5 ( 0.6%)
5 ( 0.6%)
5 ( 0.6%)
5 ( 0.6%)
5 ( 0.6%)
723 (82.5%) |
 |
876
(100%) |
0
(0%) |
| 9 |
CMAQ | Me [numeric] |
an (sd) : 8.4 (3) | 60 min < med < max:
1.6 < 8.6 < 23.1
IQR (CV) : 3.7 (0.4) |
1 distinct values |  | 87 |
6 | 0
(100%) |
(0%) |
| 10 |
zcta
[factor] |
1. 1022
2. 1103
3. 1201
4. 1608
5. 1832
6. 1840
7. 1863
8. 1904
9. 2113
10. 2119
[ 832 others ] |
1 ( 0.1%)
2 ( 0.2%)
1 ( 0.1%)
2 ( 0.2%)
1 ( 0.1%)
1 ( 0.1%)
1 ( 0.1%)
1 ( 0.1%)
1 ( 0.1%)
1 ( 0.1%)
864 (98.6%) |
 |
876
(100%) |
0
(0%) |
| 11 |
zcta_area
[numeric] |
Mean (sd) : 183173481.9 (542598878.5)
min < med < max:
15459 < 37653560.5 < 8164820625
IQR (CV) : 145836906.5 (3) |
842 distinct values |
 |
876
(100%) |
0
(0%) |
| 12 |
zcta_pop
[numeric] |
Mean (sd) : 24227.6 (17772.2)
min < med < max:
0 < 22014 < 95397
IQR (CV) : 25207.8 (0.7) |
837 distinct values |
 |
876
(100%) |
0
(0%) |
| 13 |
imp_a500
[numeric] |
Mean (sd) : 24.7 (19.3)
min < med < max:
0 < 25.1 < 69.6
IQR (CV) : 36.5 (0.8) |
816 distinct values |
 |
876
(100%) |
0
(0%) |
| 14 |
imp_a1000
[numeric] |
Mean (sd) : 24.3 (18)
min < med < max:
0 < 24.5 < 67.5
IQR (CV) : 33.3 (0.7) |
860 distinct values |
 |
876
(100%) |
0
(0%) |
| 15 |
imp_a5000
[numeric] |
Mean (sd) : 19.9 (14.7)
min < med < max:
0.1 < 19.1 < 74.6
IQR (CV) : 23.3 (0.7) |
870 distinct values |
 |
876
(100%) |
0
(0%) |
| 16 |
imp_a10000
[numeric] |
Mean (sd) : 15.8 (13.8)
min < med < max:
0.1 < 12.4 < 72.1
IQR (CV) : 19.6 (0.9) |
870 distinct values |
 |
876
(100%) |
0
(0%) |
| 17 |
imp_a15000
[numeric] |
Mean (sd) : 13.4 (13.1)
min < med < max:
0.1 < 9.7 < 71.1
IQR (CV) : 17.3 (1) |
870 distinct values |
 |
876
(100%) |
0
(0%) |
| 18 |
county_area
[numeric] |
Mean (sd) : 3768701992.1 (6212829553.6)
min < med < max:
33703512 < 1690826566.5 < 51947229509
IQR (CV) : 1761655911.5 (1.6) |
564 distinct values |
 |
876
(100%) |
0
(0%) |
| 19 |
county_pop
[numeric] |
Mean (sd) : 687298.4 (1293488.7)
min < med < max:
783 < 280730.5 < 9818605
IQR (CV) : 642211 (1.9) |
564 distinct values |
 |
876
(100%) |
0
(0%) |
| 20 |
log_dist_to_prisec
[numeric] |
Mean (sd) : 6.2 (1.4)
min < med < max:
-1.5 < 6.4 < 10.5
IQR (CV) : 1.7 (0.2) |
870 distinct values |
 |
876
(100%) |
0
(0%) |
| 21 |
log_pri_length_5000
[numeric] |
Mean (sd) : 9.8 (1.1)
min < med < max:
8.5 < 10.1 < 12
IQR (CV) : 2.2 (0.1) |
586 distinct values |
 |
876
(100%) |
0
(0%) |
| 22 |
log_pri_length_10000
[numeric] |
Mean (sd) : 10.9 (1.1)
min < med < max:
9.2 < 11.2 < 13
IQR (CV) : 2 (0.1) |
687 distinct values |
 |
876
(100%) |
0
(0%) |
| 23 |
log_pri_length_15000
[numeric] |
Mean (sd) : 11.5 (1.1)
min < med < max:
9.6 < 11.7 < 13.6
IQR (CV) : 1.5 (0.1) |
726 distinct values |
 |
876
(100%) |
0
(0%) |
| 24 |
log_pri_length_25000
[numeric] |
Mean (sd) : 12.2 (1.1)
min < med < max:
10.1 < 12.5 < 14.4
IQR (CV) : 1.4 (0.1) |
787 distinct values |
 |
876
(100%) |
0
(0%) |
| 25 |
log_prisec_length_500
[numeric] |
Mean (sd) : 7 (1)
min < med < max:
6.2 < 6.2 < 9.4
IQR (CV) : 1.6 (0.1) |
382 distinct values |
 |
876
(100%) |
0
(0%) |
| 26 |
log_prisec_length_1000
[numeric] |
Mean (sd) : 8.6 (0.8)
min < med < max:
7.6 < 8.7 < 10.5
IQR (CV) : 1.6 (0.1) |
591 distinct values |
 |
876
(100%) |
0
(0%) |
| 27 |
log_prisec_length_5000
[numeric] |
Mean (sd) : 11.3 (0.8)
min < med < max:
8.5 < 11.4 < 12.8
IQR (CV) : 0.9 (0.1) |
852 distinct values |
 |
876
(100%) |
0
(0%) |
| 28 |
log_prisec_length_10000
[numeric] |
Mean (sd) : 12.4 (0.7)
min < med < max:
9.2 < 12.5 < 13.8
IQR (CV) : 1 (0.1) |
867 distinct values |
 |
876
(100%) |
0
(0%) |
| 29 |
log_prisec_length_15000
[numeric] |
Mean (sd) : 13 (0.7)
min < med < max:
9.6 < 13.1 < 14.4
IQR (CV) : 1 (0.1) |
869 distinct values |
 |
876
(100%) |
0
(0%) |
| 30 |
log_prisec_length_25000
[numeric] |
Mean (sd) : 13.8 (0.7)
min < med < max:
10.1 < 13.9 < 15.2
IQR (CV) : 1 (0.1) |
870 distinct values |
 |
876
(100%) |
0
(0%) |
| 31 |
log_nei_2008_pm25_sum_10000
[numeric] |
Mean (sd) : 4 (2.4)
min < med < max:
0 < 4.3 < 9.1
IQR (CV) : 3.5 (0.6) |
828 distinct values |
 |
876
(100%) |
0
(0%) |
| 32 |
log_nei_2008_pm25_sum_15000
[numeric] |
Mean (sd) : 4.7 (2.2)
min < med < max:
0 < 5 < 9.4
IQR (CV) : 2.9 (0.5) |
855 distinct values |
 |
876
(100%) |
0
(0%) |
| 33 |
log_nei_2008_pm25_sum_25000
[numeric] |
Mean (sd) : 5.7 (2.1)
min < med < max:
0 < 5.9 < 9.7
IQR (CV) : 2.6 (0.4) |
860 distinct values |
 |
876
(100%) |
0
(0%) |
| 34 |
log_nei_2008_pm10_sum_10000
[numeric] |
Mean (sd) : 4.3 (2.3)
min < med < max:
0 < 4.6 < 9.3
IQR (CV) : 3.4 (0.5) |
829 distinct values |
 |
876
(100%) |
0
(0%) |
| 35 |
log_nei_2008_pm10_sum_15000
[numeric] |
Mean (sd) : 5.1 (2.2)
min < med < max:
0 < 5.4 < 9.7
IQR (CV) : 2.8 (0.4) |
855 distinct values |
 |
876
(100%) |
0
(0%) |
| 36 |
log_nei_2008_pm10_sum_25000
[numeric] |
Mean (sd) : 6.1 (2)
min < med < max:
0 < 6.4 < 9.9
IQR (CV) : 2.4 (0.3) |
860 distinct values |
 |
876
(100%) |
0
(0%) |
| 37 |
popdens_county
[numeric] |
Mean (sd) : 551.8 (1711.5)
min < med < max:
0.3 < 156.7 < 26821.9
IQR (CV) : 470 (3.1) |
564 distinct values |
 |
876
(100%) |
0
(0%) |
| 38 |
popdens_zcta
[numeric] |
Mean (sd) : 1279.7 (2757.5)
min < med < max:
0 < 610.3 < 30418.8
IQR (CV) : 1281.4 (2.2) |
840 distinct values |
 |
876
(100%) |
0
(0%) |
| 39 |
nohs
[numeric] |
Mean (sd) : 7 (7.2)
min < med < max:
0 < 5.1 < 100
IQR (CV) : 6.1 (1) |
215 distinct values |
 |
876
(100%) |
0
(0%) |
| 40 |
somehs
[numeric] |
Mean (sd) : 10.2 (6.2)
min < med < max:
0 < 9.4 < 72.2
IQR (CV) : 8 (0.6) |
230 distinct values |
 |
876
(100%) |
0
(0%) |
| 41 |
hs
[numeric] |
Mean (sd) : 30.3 (11.4)
min < med < max:
0 < 30.8 < 100
IQR (CV) : 12.3 (0.4) |
347 distinct values |
 |
876
(100%) |
0
(0%) |
| 42 |
somecollege
[numeric] |
Mean (sd) : 21.6 (8.6)
min < med < max:
0 < 21.3 < 100
IQR (CV) : 7.2 (0.4) |
240 distinct values |
 |
876
(100%) |
0
(0%) |
| 43 |
associate
[numeric] |
Mean (sd) : 7.1 (4)
min < med < max:
0 < 7.1 < 71.4
IQR (CV) : 3.9 (0.6) |
157 distinct values |
 |
876
(100%) |
0
(0%) |
| 44 |
bachelor
[numeric] |
Mean (sd) : 14.9 (9.7)
min < med < max:
0 < 12.9 < 100
IQR (CV) : 10.4 (0.7) |
301 distinct values |
 |
876
(100%) |
0
(0%) |
| 45 |
grad
[numeric] |
Mean (sd) : 8.9 (8.6)
min < med < max:
0 < 6.7 < 100
IQR (CV) : 7.1 (1) |
245 distinct values |
 |
876
(100%) |
0
(0%) |
| 46 |
pov
[numeric] |
Mean (sd) : 15 (11.3)
min < med < max:
0 < 12.1 < 65.9
IQR (CV) : 14.7 (0.8) |
345 distinct values |
 |
876
(100%) |
0
(0%) |
| 47 |
hs_orless
[numeric] |
Mean (sd) : 47.5 (16.8)
min < med < max:
0 < 48.7 < 100
IQR (CV) : 21.2 (0.4) |
464 distinct values |
 |
876
(100%) |
0
(0%) |
| 48 |
urc2013
[numeric] |
Mean (sd) : 2.9 (1.5)
min < med < max:
1 < 3 < 6
IQR (CV) : 2 (0.5) |
1 : 203 (23.2%)
2 : 163 (18.6%)
3 : 228 (26.0%)
4 : 123 (14.0%)
5 : 101 (11.5%)
6 : 58 ( 6.6%) |
 |
876
(100%) |
0
(0%) |
| 49 |
urc2006
[numeric] |
Mean (sd) : 3 (1.5)
min < med < max:
1 < 3 < 6
IQR (CV) : 2 (0.5) |
1 : 195 (22.3%)
2 : 162 (18.5%)
3 : 221 (25.2%)
4 : 127 (14.5%)
5 : 115 (13.1%)
6 : 56 ( 6.4%) |
 |
876
(100%) |
0
(0%) |
| 50 |
aod
[numeric] |
Mean (sd) : 43.7 (19.6)
min < med < max:
5 < 40.2 < 143
IQR (CV) : 18 (0.4) |
581 distinct values |
 |
876
(100%) |
0
(0%) |
We can see that for many variables there are many low values as the distribution shows two peaks, one near zero and another with a higher value. This is true for the imp variables (measures of development), the nei variables (measures of emission sources) and the road density variables. We can also see that the range of some of the variables is very large, in particular the area and population related variables.
In prediction analyses, it is also useful to evaluate if any of the variables are correlated.
Intuitively we can expect some of our variables to be correlated.
We expect the development variables (imp) to be correlated with each other, we expect the road density variables to be correlated with each other, we expect the emission variables to be correlated with each other, and we also expect these variables to be correlated with one another and likely correlated with population density. We can get a nice visualization of correlation using the ggcorr() function and the ggpairs() function of the GGally package. to select our variables of interest we can use the select() function with the contains() function of the tidyr package.
First let’s look at the imp/development variables.


Indeed, we can see that imp_a1000 and imp_a500 are perfectly correlated, as well as imp_a10000, imp_a15000.
Now let’s take a look at the road density data:


We can see that while some of the road density variables are highly correlated with one another (or anti-correlated), there arr some variables that are less correlated with one another.
Finally let’s look at the emission variables.


We would also expect the population density data might correlate with some of these variables. Let’s take a look.


Interesting, so these variables don’t appear to be highly correlated, therefore we might need variables from each of the categories to predict our monitor PM2.5 pollution values.
We seem to have some pretty extreme population values though, so let’s see what happens when we take the log value.


Indeed this increased the correlation, but variables from each of these categories may still prove to be useful for prediction.
Now that we have a sense of what our data is like we can get started.
LS0tCnRpdGxlOiAiT3BlbiBDYXNlIFN0dWRpZXMgOiBQcmVkaWN0aW5nIEFubnVhbCBBaXIgUG9sbHV0aW9uICIKY3NzOiBzdHlsZS5jc3MKb3V0cHV0OgogIGh0bWxfZG9jdW1lbnQ6CiAgICBzZWxmX2NvbnRhaW5lZDogeWVzCiAgICBjb2RlX2Rvd25sb2FkOiB5ZXMKICAgIGhpZ2hsaWdodDogdGFuZ28KICAgIG51bWJlcl9zZWN0aW9uczogbm8KICAgIHRoZW1lOiBjb3NtbwogICAgdG9jOiB5ZXMKICAgIHRvY19mbG9hdDogeWVzCiAgcGRmX2RvY3VtZW50OgogICAgdG9jOiB5ZXMKICB3b3JkX2RvY3VtZW50OgogICAgdG9jOiB5ZXMKCi0tLQo8c3R5bGU+CiNUT0MgewogIGJhY2tncm91bmQ6IHVybCgiaHR0cHM6Ly9vcGVuY2FzZXN0dWRpZXMuZ2l0aHViLmlvL2ltZy9sb2dvLmpwZyIpOwogIGJhY2tncm91bmQtc2l6ZTogY29udGFpbjsKICBwYWRkaW5nLXRvcDogMjQwcHggIWltcG9ydGFudDsKICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0Owp9Cjwvc3R5bGU+CgoKCgpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGluY2x1ZGUgPSBUUlVFLCBjb21tZW50ID0gTkEsIGVjaG8gPSBUUlVFLAogICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9IEZBTFNFLCB3YXJuaW5nID0gRkFMU0UsIGNhY2hlID0gRkFMU0UsCiAgICAgICAgICAgICAgICAgICAgICBmaWcuYWxpZ24gPSAiY2VudGVyIiwgb3V0LndpZHRoID0gJzkwJScpCmxpYnJhcnkoaGVyZSkKbGlicmFyeShrbml0cikKYGBgCgoKIyMjIyB7Lm91dGxpbmUgfQpgYGB7ciwgZWNobyA9IEZBTFNFLCBvdXQud2lkdGggPSAiODAwIHB4In0Ka25pdHI6OmluY2x1ZGVfZ3JhcGhpY3MoaGVyZTo6aGVyZSgiaW1nIiwgIm1haW5wbG90LnBuZyIpKQpgYGAKCiMjIyMKCiMjIHsuZGlzY2xhaW1lcl9ibG9ja30KCioqRGlzY2xhaW1lcioqOiBUaGUgcHVycG9zZSBvZiB0aGUgW09wZW4gQ2FzZSBTdHVkaWVzXShodHRwczovL29wZW5jYXNlc3R1ZGllcy5naXRodWIuaW8pe3RhcmdldD0iX2JsYW5rIn0gcHJvamVjdCBpcyAqKnRvIGRlbW9uc3RyYXRlIHRoZSB1c2Ugb2YgdmFyaW91cyBkYXRhIHNjaWVuY2UgbWV0aG9kcywgdG9vbHMsIGFuZCBzb2Z0d2FyZSBpbiB0aGUgY29udGV4dCBvZiBtZXNzeSwgcmVhbC13b3JsZCBkYXRhKiouIEEgZ2l2ZW4gY2FzZSBzdHVkeSBkb2VzIG5vdCBjb3ZlciBhbGwgYXNwZWN0cyBvZiB0aGUgcmVzZWFyY2ggcHJvY2VzcywgaXMgbm90IGNsYWltaW5nIHRvIGJlIHRoZSBtb3N0IGFwcHJvcHJpYXRlIHdheSB0byBhbmFseXplIGEgZ2l2ZW4gZGF0YSBzZXQsIGFuZCBzaG91bGQgbm90IGJlIHVzZWQgaW4gdGhlIGNvbnRleHQgb2YgbWFraW5nIHBvbGljeSBkZWNpc2lvbnMgd2l0aG91dCBleHRlcm5hbCBjb25zdWx0YXRpb24gZnJvbSBzY2llbnRpZmljIGV4cGVydHMuIAoKIyMgTW90aXZhdGlvbgpBIHZhcmlldHkgb2YgZGlmZmVyZW50IHNvdXJjZXMgY29udHJpYnV0ZSBkaWZmZXJlbnQgdHlwZXMgb2YgcG9sbHV0YW50cyB0byB3aGF0IHdlIGNhbGwgYWlyIHBvbGx1dGlvbi4gClNvbWUgc291cmNlcyBhcmUgbmF0dXJhbCB3aGlsZSBvdGhlcnMgYXJlIGFudGhyb3BvZ2VuaWMgKGh1bWFuIGRlcml2ZWQpOgoKPHAgYWxpZ249ImNlbnRlciI+CiAgPGltZyB3aWR0aD0iNjAwIiBzcmM9Imh0dHBzOi8vd3d3Lm5wcy5nb3Yvc3ViamVjdHMvYWlyL2ltYWdlcy9Tb3VyY2VzX0dyYXBoaWNfSHVnZS5qcGc/bWF4d2lkdGg9MTIwMCZtYXhoZWlnaHQ9MTIwMCZhdXRvcm90YXRlPWZhbHNlIj4KPC9wPgoKIyMjIyMgW1tzb3VyY2VdKGh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vdXJsP3NhPWkmdXJsPWh0dHBzJTNBJTJGJTJGd3d3Lm5wcy5nb3YlMkZzdWJqZWN0cyUyRmFpciUyRnNvdXJjZXMuaHRtJnBzaWc9QU92VmF3MnY3QVZ4U0Y4WlNBUEVoTnVkVnRiTiZ1c3Q9MTU4NTc3MDk2NjIxNzAwMCZzb3VyY2U9aW1hZ2VzJmNkPXZmZSZ2ZWQ9MENBSVFqUnhxRndvVENQRE42NnFfeGVnQ0ZRQUFBQUFkQUFBQUFCQUQpXQoKIyMjIyBNYWpvciB0eXBlcyBvZiBhaXIgcG9sbHV0YW50cwoKMSkgKipHYXNlb3VzKiogLSBDYXJib24gTW9ub3hpZGUgKENPKSwgT3pvbmUgKE9+M34pLCBOaXRyb2dlbiBPeGlkZXMoTk8sIE5PfjJ+KSwgU3VscGhlciBEaW94aWRlIChTT34yfikKMikgKipQYXJ0aWN1bGF0ZSoqIC0gc21hbGwgbGlxdWlkcyBhbmQgc29saWRzIHN1c3BlbmRlZCBpbiB0aGUgYWlyIChpbmNsdWRlcyBsZWFkLSBjYW4gaW5jbHVkZSBjZXJ0YWluIHR5cGVzIG9mIGR1c3QpCjMpICoqRHVzdCoqIC0gc21hbGwgc29saWRzIChsYXJnZXIgdGhhbiBwYXJ0aWN1bGF0ZXMpIHRoYXQgY2FuIGJlIHN1c3BlbmRlZCBpbiB0aGUgYWlyIGZvciBzb21lIHRpbWUgYnV0IGV2ZW50dWFsbHkgc2V0dGxlCjQpICoqQmlvbG9naWNhbCoqIC0gcG9sbGVuLCBiYWN0ZXJpYSwgdmlydXNlcywgbW9sZCBzcG9yZXMKClNlZSBbaGVyZV0paHR0cDovL3d3dy5yZWRsb2dlbnYuY29tL3dvcmtlci1zYWZldHkvcGFydC0xLWR1c3QtYW5kLXBhcnRpY3VsYXRlLW1hdHRlcikgZm9yIG1vcmUgZGV0YWlsIG9uIHRoZSB0eXBlcyBvZiBwb2xsdXRhbnRzIGluIHRoZSBhaXIuCgoKIyMjIyBQYXJ0aWN1bGF0ZSBwb2xsdXRpb24gCgpBaXIgcG9sbHV0aW9uIHBhcnRpY3VsYXRlcyBhcmUgZ2VuZXJhbGx5IGRlc2NyaWJlZCBieSB0aGVpciAqKnNpemUqKi4KClRoZXJlIGFyZSAzIG1ham9yIGNhdGVnb3JpZXM6CgoxKSAqKkxhcmdlIENvYXJzZSoqIFBhcnRpY3VsYXRlIE1hdGVyIC0gaGFzIGRpYW1ldGVyIG9mID4xMCBtaWNyb21ldGVycyAoMTAgwrVtKSAKCjIpICoqQ29hcnNlKiogUGFydGljdWxhdGUgTWF0ZXIgKGNhbGxlZCAqKlBNfjEwLTIuNX4qKikgLSBoYXMgZGlhbWV0ZXIgb2YgYmV0d2VlbiAyLjUgwrVtIGFuZCAxMCDCtW0KCjMpICoqRmluZSoqIFBhcnRpY3VsYXRlIE1hdGVyIChjYWxsZWQgKipQTX4yLjV+KiopIC0gaGFzIGRpYW1ldGVyIG9mIDwgMi41IMK1bSAKCioqUE1+MTB+KiogaW5jbHVkZXMgYW55IHBhcnRpY3VsYXRlIG1hdGVyIDwxMCDCtW0gKGJvdGggY29hcnNlIGFuZCBmaW5lIHBhcnRpY3VsYXRlIG1hdGVyKQoKSGVyZSB5b3UgY2FuIHNlZSBob3cgdGhlc2Ugc2l6ZXMgY29tcGFyZSB3aXRoIGEgaHVtYW4gaGFpcjoKCmBgYHtyLCBlY2hvID0gRkFMU0UsIG91dC53aWR0aD0gIjYwMCBweCJ9CmtuaXRyOjppbmNsdWRlX2dyYXBoaWNzKGhlcmU6OmhlcmUoImltZyIsICJwbTIuNV9zY2FsZV9ncmFwaGljLWNvbG9yXzIuanBnIikpCmBgYAoKIyMjIyMgW1tzb3VyY2VdKGh0dHBzOi8vd3d3LmVwYS5nb3YvcG0tcG9sbHV0aW9uL3BhcnRpY3VsYXRlLW1hdHRlci1wbS1iYXNpY3MpXQoKPCEtLSA8cCBhbGlnbj0iY2VudGVyIj4gLS0+CjwhLS0gICA8aW1nIHdpZHRoPSI1MDAiIHNyYz0iaHR0cHM6Ly93d3cuc2Vuc2lyaW9uLmNvbS9pbWFnZXMvc2Vuc2lyaW9uLXNwZWNpYWxpc3QtYXJ0aWNsZS1maWd1cmUtMS1jZGQ3MC5qcGciPiAtLT4KPCEtLSA8L3A+IC0tPgoKCjx1PlRoZSBmb2xsb3dpbmcgcGxvdCBhbmQgdGFibGUgc2hvdyB0aGUgcmVsYXRpdmUgc2l6ZXMgb2YgdGhlc2UgZGlmZmVyZW50IHBvbGx1dGFudHMgaW4gbWljcm9tZXRlcnMowrVtKTo8L3U+Cgo8cCBhbGlnbj0iY2VudGVyIj4KICA8aW1nIHdpZHRoPSI2MDAiIHNyYz0iaHR0cHM6Ly91cGxvYWQud2lraW1lZGlhLm9yZy93aWtpcGVkaWEvY29tbW9ucy90aHVtYi9kL2RmL0FpcmJvcm5lLXBhcnRpY3VsYXRlLXNpemUtY2hhcnQuc3ZnLzgwMHB4LUFpcmJvcm5lLXBhcnRpY3VsYXRlLXNpemUtY2hhcnQuc3ZnLnBuZyI+CjwvcD4KCiMjIyMjIFtbc291cmNlXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9QYXJ0aWN1bGF0ZXMpXQoKCjxwIGFsaWduPSJjZW50ZXIiPgogIDxpbWcgd2lkdGg9IjUwMCIgc3JjPSJodHRwczovL3d3dy5mcm9udGllcnNpbi5vcmcvZmlsZXMvQXJ0aWNsZXMvNTA1NTcwL2ZwdWJoLTA4LTAwMDE0LUhUTUwvaW1hZ2VfbS9mcHViaC0wOC0wMDAxNC10MDAyLmpwZyI+CjwvcD4KCiMjIyMjIFtbc291cmNlXShodHRwczovL3d3dy5mcm9udGllcnNpbi5vcmcvYXJ0aWNsZXMvMTAuMzM4OS9mcHViaC4yMDIwLjAwMDE0L2Z1bGwpXQoKCjx1PlRoaXMgdGFibGUgc2hvd3MgaG93IGRlZXBseSBzb21lIG9mIHRoZSBzbWFsbGVyIGZpbmUgcGFydGljbGVzIGNhbiBwZW5ldHJhdGUgd2l0aGluIHRoZSBodW1hbiBib2R5OjwvdT4KCjxwIGFsaWduPSJjZW50ZXIiPgogIDxpbWcgd2lkdGg9IjUwMCIgc3JjPSJodHRwczovL3d3dy5mcm9udGllcnNpbi5vcmcvZmlsZXMvQXJ0aWNsZXMvNTA1NTcwL2ZwdWJoLTA4LTAwMDE0LUhUTUwvaW1hZ2VfbS9mcHViaC0wOC0wMDAxNC10MDAxLmpwZyI+CjwvcD4KCiMjIyMjIFtbc291cmNlXShodHRwczovL3d3dy5mcm9udGllcnNpbi5vcmcvYXJ0aWNsZXMvMTAuMzM4OS9mcHViaC4yMDIwLjAwMDE0L2Z1bGwpXQoKCiMjIyMgTmVnYXRpdmUgSW1wYWN0IG9mIFBhcnRpY3VsYXRlIEV4cG9zdXJlIG9uIEhlYWx0aCAKCkV4cG9zdXJlIHRvIGFpciBwb2xsdXRpb24gaXMgYXNzb2NpYXRlZCB3aXRoIGhpZ2hlciByYXRlcyBvZiBbbW9ydGFsaXR5XShodHRwczovL3d3dy5uY2JpLm5sbS5uaWguZ292L3BtYy9hcnRpY2xlcy9QTUM1NzgzMTg2Lyl7dGFyZ2V0PSJfYmxhbmsifSBpbiBvbGRlciBhZHVsdHMgYW5kIGlzIGtub3duIHRvIGJlIGEgcmlzayBmYWN0b3IgZm9yIG1hbnkgZGlzZWFzZXMgYW5kIGNvbmRpdGlvbnMgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0bzoKCjEpIFtBc3RobWFdKGh0dHBzOi8vd3d3Lm5jYmkubmxtLm5paC5nb3YvcHVibWVkLzI5MjQzOTM3KXt0YXJnZXQ9Il9ibGFuayJ9IC0gZmluZSBwYXJ0aWNsZSBleHBvc3VyZSAoKipQTX4yLjV+KiopIHdhcyBmb3VuZCB0byBiZSBhc3NvY2lhdGVkIHdpdGggaGlnaGVyIHJhdGVzIG9mIGFzdGhtYSBpbiBjaGlsZHJlbgoyKSBbSW5mbGFtbWF0aW9uIGluIHR5cGUgMSBkaWFiZXRlc10oaHR0cHM6Ly93d3cubmNiaS5ubG0ubmloLmdvdi9wdWJtZWQvMzE0MTk3NjUpe3RhcmdldD0iX2JsYW5rIn0gLSBmaW5lIHBhcnRpY2xlIGV4cG9zdXJlICgqKlBNfjIuNX4qKikgZnJvbSB0cmFmZmljLXJlbGF0ZWQgYWlyIHBvbGx1dGlvbiB3YXMgYXNzb2NpYXRlZCB3aXRoIGluY3JlYXNlZCBtZWFzdXJlcyBvZiBpbmZsYW1tYXRvcnkgbWFya2VycyBpbiB5b3V0aHMgd2l0aCB0eXBlIDEgZGlhYmV0ZXMKMykgW0x1bmcgZnVuY3Rpb24gYW5kIGVtcGh5c2VtYV0oaHR0cHM6Ly93d3cubmNiaS5ubG0ubmloLmdvdi9wdWJtZWQvMzE0MDgxMzUpe3RhcmdldD0iX2JsYW5rIn0gLSBoaWdoZXIgY29uY2VudHJhdGlvbnMgb2Ygb3pvbmUgKE9+M34pLCBuaXRyb2dlbiBveGlkZXMgKE5Pfnh+KSwgYmxhY2sgY2FyYm9uLCBhbmQgZmluZSBwYXJ0aWNsZSBleHBvc3VyZSAqKlBNfjIuNX4qKiAsIGF0IHN0dWR5IGJhc2VsaW5lIHdlcmUgc2lnbmlmaWNhbnRseSBhc3NvY2lhdGVkIHdpdGggZ3JlYXRlciBpbmNyZWFzZXMgaW4gcGVyY2VudCBlbXBoeXNlbWEgcGVyIDEwIHllYXJzIAo0KSBbTG93IGJpcnRod2VpZ2h0XShodHRwczovL3d3dy5uY2JpLm5sbS5uaWguZ292L3B1Ym1lZC8zMTM4NjY0Myl7dGFyZ2V0PSJfYmxhbmsifSAtIGZpbmUgcGFydGljbGUgZXhwb3N1cmUoKipQTX4yLjV+KiopIHdhcyBhc3NvY2lhdGVkIHdpdGggbG93ZXIgYmlydGggd2VpZ2h0IGluIGZ1bGwtdGVybSBsaXZlIGJpcnRocwo1KSBbVmlyYWwgSW5mZWN0aW9uXShodHRwczovL3d3dy50YW5kZm9ubGluZS5jb20vZG9pL2Z1bGwvMTAuMTA4MC8wODk1ODM3MDcwMTY2NTQzNCl7dGFyZ2V0PSJfYmxhbmsifSAtIGhpZ2hlciByYXRlcyBvZiBpbmZlY3Rpb24gYW5kIGluY3JlYXNlZCBzZXZlcml0eSBvZiBpbmZlY3Rpb24gYXJlIGFzc29jaWF0ZWQgd2l0aCBoaWdoZXIgZXhwb3N1cmVzIHRvIHBvbGx1dGlvbiBsZXZlbHMgaW5jbHVkaW5nIGZpbmUgcGFydGljbGUgZXhwb3N1cmUgKCoqUE1+Mi41fioqKQoKU2VlIHRoaXMgW3JldmlldyBhcnRpY2xlXShodHRwczovL3d3dy5mcm9udGllcnNpbi5vcmcvYXJ0aWNsZXMvMTAuMzM4OS9mcHViaC4yMDIwLjAwMDE0L2Z1bGwpe3RhcmdldD0iX2JsYW5rIn0gZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgc291cmNlcyBvZiBhaXIgcG9sbHV0aW9uIGFuZCB0aGUgaW5mbHVlbmNlIG9mIGFpciBwb2xsdXRpb24gb24gaGVhbHRoLgoKIyMjIyBTcGFyc2UgTW9uaXRvcmluZyBpcyBQcm9ibGVtYXRpYyBmb3IgUHVibGljIEhlYWx0aAoKSGlzdG9yaWNhbGx5IGVwaWRlbWlvbG9naWNhbCBzdHVkaWVzIHdvdWxkIGFzc2VzcyB0aGUgaW5mbHVlbmNlIG9mIGFpciBwb2xsdXRpb24gb24gaGVhbHRoIG91dGNvbWVzIGJ5IHJlbHlpbmcgb24gYSBudW1iZXIgb2YgbW9uaXRvcnMgbG9jYXRlZCBhcm91bmQgdGhlIGNvdW50cnkuIEhvd2V2ZXIgYXMgY2FuIGJlIHNlZW4gaW4gdGhlIGZvbGxvd2luZyBmaWd1cmUsIHRoZXNlIG1vbml0b3JzIHJlbWFpbiB0byBiZSByZWxhdGl2ZWx5IHNwYXJzZSBpbiBjZXJ0YWluIHJlZ2lvbnMgb2YgdGhlIGNvdW50cnkuIEZ1cnRoZXJtb3JlLCBkcmFtYXRpYyBkaWZmZXJlbmNlcyBpbiBwb2xsdXRpb24gcmF0ZXMgY2FuIGJlIHNlZW4gZXZlbiB3aXRoaW4gdGhlIHNhbWUgY2l0eS4KCjxwIGFsaWduPSJjZW50ZXIiPgogIDxpbWcgd2lkdGg9IjQwMCIgc3JjPSJodHRwczovL3d3dy5uY2JpLm5sbS5uaWguZ292L3BtYy9hcnRpY2xlcy9QTUM0MTM3MjcyL2Jpbi8xNDc2LTA2OVgtMTMtNjMtMS5qcGciPgo8L3A+CgojIyMjIyBbW3NvdXJjZV0oaHR0cHM6Ly9laGpvdXJuYWwuYmlvbWVkY2VudHJhbC5jb20vYXJ0aWNsZXMvMTAuMTE4Ni8xNDc2LTA2OVgtMTMtNjMpXQoKVGhpcyBsYWNrIG9mIGdyYW51bGFyaXR5IGluIGFpciBwb2xsdXRpb24gbW9uaXRvcmluZyBoYXMgaGluZGVyZWQgb3VyIGFiaWxpdHkgdG8gZGlzY2VybiB0aGUgZnVsbCBpbXBhY3Qgb2YgYWlyIHBvbGx1dGlvbiBvbiBoZWFsdGggYW5kIHRvIGlkZW50aWZ5IGF0LXJpc2sgbG9jYXRpb25zLiAKCgojIyMjIE1hY2hpbmUgTGVhcm5pbmcgT2ZmZXJzIGEgU29sdXRpb24KCkFuIFthcnRpY2xlXShodHRwczovL2Voam91cm5hbC5iaW9tZWRjZW50cmFsLmNvbS9hcnRpY2xlcy8xMC4xMTg2LzE0NzYtMDY5WC0xMy02Myl7dGFyZ2V0PSJfYmxhbmsifSBwdWJsaXNoZWQgaW4gdGhlICpFbnZpcm9ubWVudGFsIEhlYWx0aCogam91cm5hbCBkZWFsdCB3aXRoIHRoaXMgaXNzdWUgYnkgdXNpbmcgZGF0YSBhYm91dCBwb3B1bGF0aW9uIGRlbnNpdHksIHJvYWQgZGVuc2l0eSwgYW1vbmcgb3RoZXIgZmVhdHVyZXMgdG8gbW9kZWwgb3IgcHJlZGljdCBhaXIgcG9sbHV0aW9uIGxldmVscyBhdCBhIG1vcmUgbG9jYWxpemVkIHNjYWxlIHVzaW5nIG1hY2hpbmUgbGVhcm5pbmcgbWV0aG9kcy4gCgpgYGB7ciwgZWNobyA9IEZBTFNFLCBvdXQud2lkdGg9ICI4MDAgcHgifQprbml0cjo6aW5jbHVkZV9ncmFwaGljcyhoZXJlOjpoZXJlKCJpbWciLCAidGhlcGFwZXIucG5nIikpCmBgYAoKIyMjIyB7LnJlZmVyZW5jZV9ibG9ja30KWWFub3NreSwgSi4gRC4gZXQgYWwuIFNwYXRpby10ZW1wb3JhbCBtb2RlbGluZyBvZiBwYXJ0aWN1bGF0ZSBhaXIgcG9sbHV0aW9uIGluIHRoZSBjb250ZXJtaW5vdXMgVW5pdGVkIFN0YXRlcyB1c2luZyBnZW9ncmFwaGljIGFuZCBtZXRlb3JvbG9naWNhbCBwcmVkaWN0b3JzLiAqRW52aXJvbiBIZWFsdGgqIDEzLCA2MyAoMjAxNCkuCgojIyMjCgpUaGUgYXV0aG9ycyBvZiB0aGlzIGFydGljbGUgc3RhdGUgdGhhdDoKCj4gIkV4cG9zdXJlIHRvIGF0bW9zcGhlcmljIHBhcnRpY3VsYXRlIG1hdHRlciAoUE0pIHJlbWFpbnMgYW4gaW1wb3J0YW50IHB1YmxpYyBoZWFsdGggY29uY2VybiwKYWx0aG91Z2ggaXQgcmVtYWlucyBkaWZmaWN1bHQgdG8gcXVhbnRpZnkgYWNjdXJhdGVseSBhY3Jvc3MgbGFyZ2UgZ2VvZ3JhcGhpYyBhcmVhcyB3aXRoIHN1ZmZpY2llbnRseSBoaWdoIHNwYXRpYWwKcmVzb2x1dGlvbi4gUmVjZW50IGVwaWRlbWlvbG9naWMgYW5hbHlzZXMgaGF2ZSBkZW1vbnN0cmF0ZWQgdGhlIGltcG9ydGFuY2Ugb2Ygc3BhdGlhbGx5LSBhbmQgdGVtcG9yYWxseS1yZXNvbHZlZApleHBvc3VyZSBlc3RpbWF0ZXMsIHdoaWNoIHNob3cgbGFyZ2VyIFBNLW1lZGlhdGVkIGhlYWx0aCBlZmZlY3RzIGFzIGNvbXBhcmVkIHRvIG5lYXJlc3QgbW9uaXRvciBvcgpjb3VudHktc3BlY2lmaWMgYW1iaWVudCBjb25jZW50cmF0aW9ucy4iIAoKCmBgYHtyLCBlY2hvID0gRkFMU0UsIG91dC53aWR0aD0gIjcwMCBweCIsIGV2YWwgPSBGQUxTRX0Ka25pdHI6OmluY2x1ZGVfZ3JhcGhpY3MoaGVyZTo6aGVyZSgiaW1nIiwgImRlYXRocy5wbmciKSkKYGBgCgpUaGUgYXJ0aWNsZSBhYm92ZSBleHBsYWlucyB0aGF0IG1hY2hpbmUgbGVhcm5pbmcgbWV0aG9kcyBjYW4gYmUgdXNlZCB0byBwcmVkaWN0IGFpciBwb2xsdXRpb24gbGV2ZWxzIHdoZW4gdHJhZGl0aW9uYWwgbW9uaXRvcmluZyBzeXN0ZW1zIGFyZSBub3QgYXZhaWxhYmxlIGluIGEgcGFydGljdWxhciBhcmVhIG9yIHdoZW4gdGhlcmUgaXMgbm90IGVub3VnaCBzcGF0aWFsIGdyYW51bGFyaXR5IHdpdGggY3VycmVudCBtb25pdG9yaW5nIHN5c3RlbXMuIFdlIHdpbGwgdXNlIHNpbWlsYXIgbWV0aG9kcyB0byBwcmVkaWN0IGFubnVhbCBhaXIgcG9sbHV0aW9uIGxldmVscyBzcGF0aWFsbHkgd2l0aGluIHRoZSBVUy4KCgojIyMgTWFpbiBRdWVzdGlvbnMKCiMjIyMgey5tYWluX3F1ZXN0aW9uX2Jsb2NrfQo8Yj48dT4gT3VyIG1haW4gcXVlc3Rpb246IDwvdT48L2I+CgoxKSBDYW4gd2UgcHJlZGljdCBhbm51YWwgYXZlcmFnZSBhaXIgcG9sbHV0aW9uIGNvbmNlbnRyYXRpb25zIGF0IHRoZSBncmFudWxhcml0eSBvZiB6aXAgY29kZSByZWdpb25hbCBsZXZlbHMgdXNpbmcgcHJlZGljdG9ycyBzdWNoIGFzIGRhdGEgYWJvdXQgcG9wdWxhdGlvbiBkZW5zaXR5LCB1cmJhbml6YXRpb24sIHJvYWQgZGVuc2l0eSwgYXMgd2VsbCBhcywgc2F0ZWxsaXRlIHBvbGx1dGlvbiBkYXRhIGFuZCBjaGVtaWNhbCBtb2RlbGluZyBkYXRhPwoKIyMjIwoKIyMjIExlYXJuaW5nIE9iamVjdGl2ZXMgCgpJbiB0aGlzIGNhc2Ugc3R1ZHksIHdlIHdpbGwgd2FsayB5b3UgdGhyb3VnaCBpbXBvcnRpbmcgZGF0YSBmcm9tIENTViBmaWxlcyBhbmQgcGVyZm9ybWluZyBtYWNoaW5lIGxlYXJuaW5nIG1ldGhvZHMgdG8gcHJlZGljdCBvdXIgb3V0Y29tZSB2YXJpYWJsZSBvZiBpbnRlcmVzdCAoaW4gdGhpcyBjYXNlIGFubnVhbCBmaW5lIHBhcnRpY2xlIGFpciBwb2xsdXRpb24gZXN0aW1hdGVzKS4gV2Ugd2lsbCBlc3BlY2lhbGx5IGZvY3VzIG9uIHVzaW5nIHBhY2thZ2VzIGFuZCBmdW5jdGlvbnMgZnJvbSB0aGUgW2BUaWR5dmVyc2VgXShodHRwczovL3d3dy50aWR5dmVyc2Uub3JnLyl7dGFyZ2V0PSJfYmxhbmsifSwgYW5kIG1vcmUgc3BlY2lmaWNhbGx5IHRoZSBbYHRpZHltb2RlbHNgXShodHRwczovL2NyYW4uci1wcm9qZWN0Lm9yZy93ZWIvcGFja2FnZXMvdGlkeW1vZGVscy90aWR5bW9kZWxzLnBkZil7dGFyZ2V0PSJfYmxhbmsifSBwYWNrYWdlL2Vjb3N5c3RlbSBwcmltYXJpbHkgZGV2ZWxvcGVkIGFuZCBtYWludGFpbmVkIGJ5IFtNYXggS3Vobl0oaHR0cHM6Ly9yZXNvdXJjZXMucnN0dWRpby5jb20vYXV0aG9ycy9tYXgta3Vobil7dGFyZ2V0PSJfYmxhbmsifSBhbmQgW0RhdmlzIFZhdWdoYW5dKGh0dHBzOi8vcmVzb3VyY2VzLnJzdHVkaW8uY29tL2F1dGhvcnMvZGF2aXMtdmF1Z2hhbil7dGFyZ2V0PSJfYmxhbmsifS4gVGhpcyBwYWNrYWdlIGxvYWRzIG1vcmUgbW9kZWxpbmcgcmVsYXRlZCBwYWNrYWdlcyBsaWtlIGByc2FtcGxlYCwgYHJlY2lwZXNgLCBgcGFyc25pcGAsIGB5YXJkc3RpY2tgLCAgYW5kIGBkaWFsc2AuIFdlIHdpbGwgYWxzbyBicmllZmx5IGNvdmVyIHRoZSBgd29ya2Zsb3dzYCBhbmQgYHR1bmVgIHBhY2thZ2VzLiBUaGUgdGlkeXZlcnNlIGlzIGEgbGlicmFyeSBvZiBwYWNrYWdlcyBjcmVhdGVkIGJ5IFJTdHVkaW8uIFdoaWxlIHNvbWUgc3R1ZGVudHMgbWF5IGJlIGZhbWlsaWFyIHdpdGggcHJldmlvdXMgUiBwcm9ncmFtbWluZyBwYWNrYWdlcywgdGhlc2UgcGFja2FnZXMgbWFrZSBkYXRhIHNjaWVuY2UgaW4gUiBlc3BlY2lhbGx5IGVmZmljaWVudC4KCgpgYGB7ciwgb3V0LndpZHRoID0gIjIwJSIsIGVjaG8gPSBGQUxTRSwgZmlnLmFsaWduID0iY2VudGVyIn0KaW5jbHVkZV9ncmFwaGljcygiaHR0cHM6Ly90aWR5dmVyc2UudGlkeXZlcnNlLm9yZy9sb2dvLnBuZyIpCmBgYAoKYGBge3IsIG91dC53aWR0aCA9ICIxMDBweCIsIGVjaG8gPSBGQUxTRSwgZmlnLmFsaWduID0iY2VudGVyIn0KaW5jbHVkZV9ncmFwaGljcygiaHR0cHM6Ly9wYnMudHdpbWcuY29tL21lZGlhL0RrQkZwU3NXNEFJeXlJTi5wbmciKQpgYGAKCgpXZSB3aWxsIGJlZ2luIGJ5IGxvYWRpbmcgdGhlIHBhY2thZ2VzIHRoYXQgd2Ugd2lsbCBuZWVkOgoKYGBge3J9CmxpYnJhcnkoaGVyZSkKbGlicmFyeShyZWFkcikKbGlicmFyeShkcGx5cikKbGlicmFyeShza2ltcikKbGlicmFyeShzdW1tYXJ5dG9vbHMpCmxpYnJhcnkobWFncml0dHIpCmxpYnJhcnkoR0dhbGx5KQoKbGlicmFyeSh0aWR5bW9kZWxzKSMgYnJvb20sIGRpYWxzLCBpbmZlciwgcGFyc25pcCwgcHVycnIsIHJlY2lwZXMsIHJzYW1wbGUsIHRpYmJsZSwgeWFyZHN0aWNrCmxpYnJhcnkod29ya2Zsb3dzKQpsaWJyYXJ5KHR1bmUpCgojIGxpYnJhcnkoc3RyaW5ncikKIyBsaWJyYXJ5KHB1cnJyKQojIGxpYnJhcnkodGliYmxlKQojIGxpYnJhcnkodGlkeXIpCiMgbGlicmFyeShnZ3Bsb3QyKQojIGxpYnJhcnkoZ2dwdWJyKQojIGxpYnJhcnkoZm9yY2F0cykKIyBsaWJyYXJ5KGxtZXJUZXN0KQojIGxpYnJhcnkoY2FyKQojIGxpYnJhcnkoZ2dpcmFwaCkKIyBsaWJyYXJ5KGdnZm9yY2UpCiMgbGlicmFyeSh2aXJpZGlzKQojIGxpYnJhcnkoY293cGxvdCkKYGBgCgoKIFBhY2thZ2UgICB8IFVzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLS0tLS0tLS0tLSB8LS0tLS0tLS0tLS0tLQpbaGVyZV0oaHR0cHM6Ly9naXRodWIuY29tL2plbm55YmMvaGVyZV9oZXJlKXt0YXJnZXQ9Il9ibGFuayJ9ICAgICAgIHwgdG8gZWFzaWx5IGxvYWQgYW5kIHNhdmUgZGF0YQpbcmVhZHJdKGh0dHBzOi8vcmVhZHIudGlkeXZlcnNlLm9yZy8pe3RhcmdldD0iX2JsYW5rIn0gICAgICB8IHRvIGltcG9ydCB0aGUgQ1NWIGZpbGUgZGF0YQpbZHBseXJdKGh0dHBzOi8vZHBseXIudGlkeXZlcnNlLm9yZy8pe3RhcmdldD0iX2JsYW5rIn0gICAgICB8IHRvIHZpZXcvYXJyYW5nZS9maWx0ZXIvc2VsZWN0L2NvbXBhcmUgc3BlY2lmaWMgc3Vic2V0cyBvZiB0aGUgZGF0YSAKW3NraW1yXShodHRwczovL2NyYW4uci1wcm9qZWN0Lm9yZy93ZWIvcGFja2FnZXMvc2tpbXIvaW5kZXguaHRtbCl7dGFyZ2V0PSJfYmxhbmsifSAgICAgIHwgdG8gZ2V0IGFuIG92ZXJ2aWV3IG9mIGRhdGEKW3N1bW1hcnl0b29sc10oaHR0cHM6Ly9jcmFuLnItcHJvamVjdC5vcmcvd2ViL3BhY2thZ2VzL3NraW1yL2luZGV4Lmh0bWwpe3RhcmdldD0iX2JsYW5rIn0gICAgICB8IHRvIGdldCBhbiBvdmVydmlldyBvZiBkYXRhIGluIGEgZGlmZmVyZW50IHN0eWxlClttYWdyaXR0cl0oaHR0cHM6Ly9tYWdyaXR0ci50aWR5dmVyc2Uub3JnL2FydGljbGVzL21hZ3JpdHRyLmh0bWwpe3RhcmdldD0iX2JsYW5rIn0gICB8IHRvIHVzZSB0aGUgYCU8PiVgIHBpcHBpbmcgb3BlcmF0b3IgCltHR2FsbHldKGh0dHBzOi8vY3Jhbi5yLXByb2plY3Qub3JnL3dlYi9wYWNrYWdlcy9HR2FsbHkvR0dhbGx5LnBkZil7dGFyZ2V0PSJfYmxhbmsifSB8IHRvIGNyZWF0ZSBjb3JyZWxhdGlvbiBwbG90cyAgCltyc2FtcGxlXShodHRwczovL3RpZHltb2RlbHMuZ2l0aHViLmlvL3JzYW1wbGUvYXJ0aWNsZXMvQmFzaWNzLmh0bWwpe3RhcmdldD0iX2JsYW5rIn0gICB8IHRvIHNwbGl0IHRoZSBkYXRhIGludG8gdGVzdGluZyBhbmQgdHJhaW5pbmcgc2V0cyBhbmQgdG8gc3BsaXQgdGhlIHRyYWluaW5nIHNldCBmb3IgY3Jvc3MtdmFsaWRhdGlvbiAgCltyZWNpcGVzXShodHRwczovL3RpZHltb2RlbHMuZ2l0aHViLmlvL3JlY2lwZXMvKXt0YXJnZXQ9Il9ibGFuayJ9ICAgfCB0byBwcmUtcHJvY2VzcyBkYXRhIGZvciBtb2RlbGluZyBpbiBhIHRpZHkgYW5kIHJlcHJvZHVjaWJsZSB3YXkgYW5kIHRvIGV4dHJhY3QgcHJlLXByb2Nlc3NlZCBkYXRhIChtYWpvciBmdW5jdGlvbnMgYXJlIGByZWNpcGUoKWAgLCBgcHJlcCgpYCBhbmQgdmFyaW91cyB0cmFuc2Zvcm1hdGlvbiBgc3RlcF8qKClgIGZ1bmN0aW9ucywgYXMgd2VsbCBhcyBganVpY2UoKWAgLSBleHRyYWN0cyBmaW5hbCBwcmVwcm9jZXNzZWQgdHJhaW5pbmcgZGF0YSBhbmQgYGJha2UoKWAgLSBhcHBsaWVzIHJlY2lwZSBzdGVwcyB0byB0ZXN0aW5nIGRhdGEpLiBTZWUgW2hlcmVdKGh0dHBzOi8vY3Jhbi5yLXByb2plY3Qub3JnL3dlYi9wYWNrYWdlcy9yZWNpcGVzL3JlY2lwZXMucGRmKXt0YXJnZXQ9Il9ibGFuayJ9ICBmb3IgbW9yZSBpbmZvLgpbcGFyc25pcF0oaHR0cHM6Ly90aWR5bW9kZWxzLmdpdGh1Yi5pby9wYXJzbmlwLyl7dGFyZ2V0PSJfYmxhbmsifSAgIHwgYW4gaW50ZXJmYWNlIHRvIGNyZWF0ZSBtb2RlbHMgKG1ham9yIGZ1bmN0aW9ucyBhcmUgIGBmaXQoKWAsIGBzZXRfZW5naW5lKClgKQpbeWFyZHN0aWNrXShodHRwczovL3RpZHltb2RlbHMuZ2l0aHViLmlvL3lhcmRzdGljay8pe3RhcmdldD0iX2JsYW5rIn0gICB8IHRvIGV2YWx1YXRlIHRoZSBwZXJmb3JtYW5jZSBvZiBtb2RlbHMKIAoKCltzdHJpbmdyXShodHRwczovL3N0cmluZ3IudGlkeXZlcnNlLm9yZy9hcnRpY2xlcy9zdHJpbmdyLmh0bWwpe3RhcmdldD0iX2JsYW5rIn0gICAgfCB0byBtYW5pcHVsYXRlIHRoZSB0ZXh0IHdpdGhpbiB0aGUgUERGIG9mIHRoZSBkYXRhCgpbcHVycnJdKGh0dHBzOi8vcHVycnIudGlkeXZlcnNlLm9yZy8pe3RhcmdldD0iX2JsYW5rIn0gICAgICB8IHRvIHBlcmZvcm0gZnVuY3Rpb25zIG9uIGFsbCBjb2x1bW5zIG9mIGEgdGliYmxlClt0aWJibGVdKGh0dHBzOi8vdGliYmxlLnRpZHl2ZXJzZS5vcmcvKXt0YXJnZXQ9Il9ibGFuayJ9ICAgICB8IHRvIGNyZWF0ZSBkYXRhIG9iamVjdHMgdGhhdCB3ZSBjYW4gbWFuaXB1bGF0ZSB3aXRoIGRwbHlyL3N0cmluZ3IvdGlkeXIvcHVycnIKW3RpZHlyXShodHRwczovL3RpZHlyLnRpZHl2ZXJzZS5vcmcvKXt0YXJnZXQ9Il9ibGFuayJ9ICAgICAgfCB0byBzZXBhcmF0ZSBkYXRhIHdpdGhpbiBhIGNvbHVtbiBpbnRvIG11bHRpcGxlIGNvbHVtbnMKW2dncGxvdDJdKGh0dHBzOi8vZ2dwbG90Mi50aWR5dmVyc2Uub3JnLyl7dGFyZ2V0PSJfYmxhbmsifSAgICB8IHRvIG1ha2UgdmlzdWFsaXphdGlvbnMgd2l0aCBtdWx0aXBsZSBsYXllcnMKW2dncHVicl0oaHR0cHM6Ly9jcmFuLnItcHJvamVjdC5vcmcvd2ViL3BhY2thZ2VzL2dncHVici9pbmRleC5odG1sKXt0YXJnZXQ9Il9ibGFuayJ9ICAgIHwgdG8gZWFzaWx5IGFkZCByZWdyZXNzaW9uIGxpbmUgZXF1YXRpb25zIHRvIHBsb3RzCltmb3JjYXRzXShodHRwczovL2ZvcmNhdHMudGlkeXZlcnNlLm9yZy8pe3RhcmdldD0iX2JsYW5rIn0gICAgfCB0byBjaGFuZ2UgZGV0YWlscyBhYm91dCBmYWN0b3JzIChjYXRlZ29yaWNhbCB2YXJpYWJsZXMpCltsbWVyVGVzdF0oaHR0cHM6Ly9jcmFuLnItcHJvamVjdC5vcmcvd2ViL3BhY2thZ2VzL2xtZXJUZXN0L2xtZXJUZXN0LnBkZil8IHRvIHBlcmZvcm0gbGluZWFyIG1peGVkIG1vZGVsIHRlc3RpbmcKW2Nhcl0oaHR0cHM6Ly9jcmFuLnItcHJvamVjdC5vcmcvd2ViL3BhY2thZ2VzL2Nhci9jYXIucGRmKXwgdG8gcGVyZm9ybSBMZXZlbmUncyBUZXN0IG9mIEhvbW9nZW5laXR5IG9mIFZhcmlhbmNlcwpbZ2dpcmFwaF0oaHR0cHM6Ly9jcmFuLnItcHJvamVjdC5vcmcvd2ViL3BhY2thZ2VzL2dnaXJhcGgvaW5kZXguaHRtbCl8IHRvIG1ha2UgcGxvdHMgaW50ZXJhY3RpdmUKW2dnZm9yY2VdKGh0dHBzOi8vY3Jhbi5yLXByb2plY3Qub3JnL3dlYi9wYWNrYWdlcy9nZ2ZvcmNlL2dnZm9yY2UucGRmKXwgdG8gbW9kaWZ5IGZhY2V0cyBpbiBwbG90cwpbdmlyaWRpc10oaHR0cHM6Ly9jcmFuLnItcHJvamVjdC5vcmcvd2ViL3BhY2thZ2VzL3ZpcmlkaXMvdmlnbmV0dGVzL2ludHJvLXRvLXZpcmlkaXMuaHRtbCl8IHRvIHBsb3QgaW4gY29sb3IgcGFsZXR0ZSB0aGF0IGlzIGVhc2lseSBpbnRlcnByZXRlZCBieSBjb2xvcmJsaW5kIGluZGl2aWR1YWxzCltjb3dwbG90XShodHRwczovL2NyYW4uci1wcm9qZWN0Lm9yZy93ZWIvcGFja2FnZXMvY293cGxvdC92aWduZXR0ZXMvaW50cm9kdWN0aW9uLmh0bWwpe3RhcmdldD0iX2JsYW5rIn0gfCB0byBhbGxvdyBwbG90cyB0byBiZSBjb21iaW5lZApfX18KCgoKVGhlIGZpcnN0IHRpbWUgd2UgdXNlIGEgZnVuY3Rpb24sIHdlIHdpbGwgdXNlIHRoZSBgOjpgIHRvIGluZGljYXRlIHdoaWNoIHBhY2thZ2Ugd2UgYXJlIHVzaW5nLiBVbmxlc3Mgd2UgaGF2ZSBvdmVybGFwcGluZyBmdW5jdGlvbiBuYW1lcywgdGhpcyBpcyBub3QgbmVjZXNzYXJ5LCBidXQgd2Ugd2lsbCBpbmNsdWRlIGl0IGhlcmUgdG8gYmUgaW5mb3JtYXRpdmUgYWJvdXQgd2hlcmUgdGhlIGZ1bmN0aW9ucyB3ZSB3aWxsIHVzZSBjb21lIGZyb20uCgoKIyMjIENvbnRleHQKClRoZSBbU3RhdGUgb2YgR2xvYmFsIEFpcl0oaHR0cHM6Ly93d3cuc3RhdGVvZmdsb2JhbGFpci5vcmcvKXt0YXJnZXQ9Il9ibGFuayJ9IGlzIGEgcmVwb3J0IHJlbGVhc2VkIGV2ZXJ5IHllYXIgdG8gY29tbXVuaWNhdGUgdGhlIGltcGFjdCBvZiBhaXIgcG9sbHV0aW9uIG9uIHB1YmxpYyBoZWFsdGguIAoKVGhlIFtTdGF0ZSBvZiBHbG9iYWwgQWlyIDIwMTkgcmVwb3J0XShodHRwczovL3d3dy5zdGF0ZW9mZ2xvYmFsYWlyLm9yZy9zaXRlcy9kZWZhdWx0L2ZpbGVzL3NvZ2FfMjAxOV9yZXBvcnQucGRmKXt0YXJnZXQ9Il9ibGFuayJ9CndoaWNoIHVzZXMgZGF0YSBmcm9tIDIwMTcgc3RhdGVkIHRoYXQ6Cgo+IEFpciBwb2xsdXRpb24gaXMgdGhlICoqZmlmdGgqKiBsZWFkaW5nIHJpc2sgZmFjdG9yIGZvciBtb3J0YWxpdHkgd29ybGR3aWRlLiBJdCBpcyByZXNwb25zaWJsZSBmb3IgbW9yZQpkZWF0aHMgdGhhbiBtYW55IGJldHRlci1rbm93biByaXNrIGZhY3RvcnMgc3VjaCBhcyBtYWxudXRyaXRpb24sIGFsY29ob2wgdXNlLCBhbmQgcGh5c2ljYWwgaW5hY3Rpdml0eS4KRWFjaCB5ZWFyLCAqKm1vcmUqKiBwZW9wbGUgZGllIGZyb20gYWlyIHBvbGx1dGlvbuKAk3JlbGF0ZWQgZGlzZWFzZSB0aGFuIGZyb20gcm9hZCAqKnRyYWZmaWMgaW5qdXJpZXMqKiBvciAqKm1hbGFyaWEqKi4KCjxwIGFsaWduPSJjZW50ZXIiPgogIDxpbWcgd2lkdGg9IjYwMCIgc3JjPSJodHRwczovL3d3dy5oZWFsdGhlZmZlY3RzLm9yZy9zaXRlcy9kZWZhdWx0L2ZpbGVzL1NvR0EtRmlndXJlcy0wMS5qcGciPgo8L3A+CgpUaGUgcmVwb3J0IGFsc28gc3RhdGVkIHRoYXQ6Cgo+SW4gMjAxNywgYWlyIHBvbGx1dGlvbiBpcyBlc3RpbWF0ZWQgdG8gaGF2ZSBjb250cmlidXRlZCB0byBjbG9zZSB0byA1IG1pbGxpb24KZGVhdGhzIGdsb2JhbGx5IOKAlCBuZWFybHkgKioxIGluIGV2ZXJ5IDEwIGRlYXRocyoqLgoKYGBge3IsIGVjaG8gPSBGQUxTRSwgb3V0LndpZHRoPSI4MDBweCJ9CmtuaXRyOjppbmNsdWRlX2dyYXBoaWNzKGhlcmU6OmhlcmUoImltZyIsIjIwMTdkZWF0aHMucG5nIikpCmBgYAojIyMjIyBbW3NvdXJjZV1dKGh0dHBzOi8vd3d3LnN0YXRlb2ZnbG9iYWxhaXIub3JnL3NpdGVzL2RlZmF1bHQvZmlsZXMvc29nYV8yMDE5X2ZhY3Rfc2hlZXQucGRmKQoKVGhlIFtTdGF0ZSBvZiBHbG9iYWwgQWlyIDIwMTggcmVwb3J0XShodHRwczovL3d3dy5zdGF0ZW9mZ2xvYmFsYWlyLm9yZy9zaXRlcy9kZWZhdWx0L2ZpbGVzL3NvZ2EtMjAxOC1yZXBvcnQucGRmKXt0YXJnZXQ9Il9ibGFuayJ9ICB1c2luZyBkYXRhIGZyb20gMjAxNiB3aGljaCBzZXBhcmF0ZWQgZGlmZmVyZW50IHR5cGVzIG9mIGFpciBwb2xsdXRpb24sIGZvdW5kIHRoYXQgKipwYXJ0aWN1bGF0ZSBwb2xsdXRpb24gd2FzIHBhcnRpY3VsYXJseSBhc3NvY2lhdGVkIHdpdGggbW9ydGFsaXR5KiouCgpgYGB7ciwgZWNobyA9IEZBTFNFLCBvdXQud2lkdGg9IjgwMHB4In0Ka25pdHI6OmluY2x1ZGVfZ3JhcGhpY3MoaGVyZTo6aGVyZSgiaW1nIiwiMjAxN21vcnRhbGl0eS5wbmciKSkKYGBgCgpUaGUgMjAxOSByZXBvcnQgc2hvd3MgdGhhdCB0aGUgaGlnaGVzdCBsZXZlbHMgb2YgZmluZSBwYXJ0aWN1bGF0ZSBwb2xsdXRpb24gb2NjdXJzIGluIEFmcmljYSBhbmQgQXNpYSBhbmQgdGhhdDoKCj4gTW9yZSB0aGFuICoqOTAlKiogb2YgcGVvcGxlIHdvcmxkd2lkZSBsaXZlIGluIGFyZWFzICoqZXhjZWVkaW5nKiogdGhlIFdvcmxkIEhlYWx0aCBPcmdhbml6YXRpb24gKFdITykgKipHdWlkZWxpbmUqKiBmb3IgaGVhbHRoeSBhaXIuIE1vcmUgdGhhbiBoYWxmIGxpdmUgaW4gYXJlYXMgdGhhdCBkbyBub3QgZXZlbiBtZWV0IFdIT+KAmXMgbGVhc3Qtc3RyaW5nZW50IGFpciBxdWFsaXR5IHRhcmdldC4KCmBgYHtyLCBlY2hvID0gRkFMU0UsIG91dC53aWR0aD0iODAwcHgifQprbml0cjo6aW5jbHVkZV9ncmFwaGljcyhoZXJlOjpoZXJlKCJpbWciLCJQTXdvcmxkLnBuZyIpKQpgYGAKCkxvb2tpbmcgYXQgdGhlIFVTIHNwZWNpZmljYWxseSwgYWlyIHBvbGx1dGlvbiBsZXZlbHMgYXJlIGdlbmVyYWxseSBpbXByb3ZpbmcuIFRoZSBVUyBFbnZpcm9ubWVudGFsIFByb3RlY3Rpb24gQWdlbmN5IChFUEEpIGFsc28gcmVsZWFzZXMgYSByZXBvcnQgYWJvdXQgYWlyIHBvbGx1dGlvbiBsZXZlbHMgY2FsbGVkIFsqT3VyIE5hdGlvbidzIEFpcipdKGh0dHBzOi8vZ2lzcHViLmVwYS5nb3YvYWlyL3RyZW5kc3JlcG9ydC8yMDE5LyNob21lKXt0YXJnZXQ9Il9ibGFuayJ9LgoKYGBge3IsIGVjaG8gPSBGQUxTRX0Ka25pdHI6OmluY2x1ZGVfZ3JhcGhpY3MoaGVyZTo6aGVyZSgiaW1nIiwgIlVTLnBuZyIpKQpgYGAKCiMjIyMjIFtbc291cmNlXV0oaHR0cHM6Ly9naXNwdWIuZXBhLmdvdi9haXIvdHJlbmRzcmVwb3J0LzIwMTkvZG9jdW1lbnRhdGlvbi9BaXJUcmVuZHNfRmx5ZXIucGRmKQoKSG93ZXZlciwgYWlyIHBvbGx1dGlvbiAqKmNvbnRpbnVlcyB0byBjb250cmlidXRlIHRvIGhlYWx0aCByaXNrIGZvciBBbWVyaWNhbnMqKiwgaW4gcGFydGljdWxhciBpbiAqKnJlZ2lvbnMgd2l0aCBoaWdoZXIgdGhhbiBuYXRpb25hbCBhdmVyYWdlIHJhdGVzKiogb2YgcG9sbHV0aW9uIHRoYXQgYWN0dWFsbHkgYXQgdGltZSBleGNlZWQgdGhlIHdvcmxkIGhlYWx0aCBvcmdhbml6YXRpb24ncyByZWNvbW1lbmRlZCBsZXZlbC4gVGh1cyBpdCBpcyBuZWNlc3NhcnkgdG8gb2J0YWluIGhpZ2ggc3BhdGlhbCBncmFudWxhcml0eSBpbiBlc3RpbWF0ZXMgb2YgYWlyIHBvbGx1dGlvbiBpbiBvcmRlciB0byBpZGVudGlmeSBsb2NhdGlvbnMgd2hlcmUgcG9wdWxhdGlvbnMgYXJlIGV4cGVyaWVuY2luZyBoYXJtZnVsIGxldmVscyBvZiBleHBvc3VyZS4KCgpZb3UgY2FuIHNlZSB0aGF0IGN1cnJlbnQgYWlyIHF1YWxpdHkgY29uZGl0aW9ucyBhdCB0aGlzIFt3ZWJzaXRlXShodHRwczovL2FxaWNuLm9yZy9jaXR5L3VzYS8pe3RhcmdldD0iX2JsYW5rIn0gYW5kIHlvdSB3aWxsIG5vdGljZSB2YXJpYXRpb24gYWNyb3NzIGRpZmZlcmVudCBjaXRpZXMuCgpIZXJlIHdlcmUgdGhlIGNvbmRpdGlvbnMgaW4gVG9wZWthIEthbnNhcyB3aGVuIHRoaXMgd2FzIHdyaXR0ZW46CgpgYGB7ciwgZWNobyA9IEZBTFNFfQprbml0cjo6aW5jbHVkZV9ncmFwaGljcyhoZXJlOjpoZXJlKCJpbWciLCAiS2Fuc2FzLnBuZyIpKQpgYGAKCkl0IHJlcG9ydHMgcGFydGljdWxhdGUgdmFsdWVzIHVzaW5nIHdoYXQgaXMgY2FsbGVkIHRoZSBbQWlyIFF1YWxpdHkgSW5kZXhdKGh0dHBzOi8vd3d3LmFpcm5vdy5nb3YvaW5kZXguY2ZtP2FjdGlvbj1hcWliYXNpY3MuYXFpKXt0YXJnZXQ9Il9ibGFuayJ9IHNjYWxlIChBUUkpLCB0aGlzIFtjYWxjdWxhdG9yXShodHRwczovL2Fpcm5vdy5nb3YvaW5kZXguY2ZtP2FjdGlvbj1haXJub3cuY2FsY3VsYXRvcil7dGFyZ2V0PSJfYmxhbmsifSBpbmRpY2F0ZXMgdGhhdCAxMTQgQVFJIGlzIGVxdWl2YWxlbnQgdG8gNDAuNyB1Zy9tXjNeIGFuZCBpcyBjb25zaWRlcmVkIHVuaGVhbHRoeSBmb3Igc2Vuc2l0aXZlIGluZGl2aWR1YWxzLiBUaHVzIHNvbWUgYXJlYXMgdmVyeSBtdWNoIGV4Y2VlZCB0aGUgV29ybGQgSGVhbHRoIE9yZ2FuaXphdGlvbiAoV0hPKSAgYW5udWFsIGV4cG9zdXJlIGd1aWRlbGluZSAoMTAgdWcvbV4zXikgYXQgY2VydGFpbiB0aW1lcyBhbmQgdGhpcyBtYXkgYWR2ZXJzZWx5IGFmZmVjdCB0aGUgaGVhbHRoIG9mIHBlb3BsZSBsaXZpbmcgaW4gdGhlc2UgbG9jYXRpb25zLgoKRnVydGhlcm1vcmUsIGFkdmVyc2UgaGVhbHRoIGVmZmVjdHMgaGF2ZSBiZWVuIGFzc29jaWF0ZWQgd2l0aCBwb3B1bGF0aW9ucyBleHBlcmllbmNpbmcgaGlnaGVyIHBvbGx1dGlvbiBleHBvc3VyZSBkZXNwaXRlIHRoZSBsZXZlbHMgYmVpbmcgYmVsb3cgc3VnZ2VzdGVkIGd1aWRlbGluZXMuIFNlY29uZGx5LCBpdCBhcHBlYXJzIHRoYXQgdGhlIGNvbXBvc2l0aW9uIG9mIHRoZSBwYXJ0aWN1bGF0ZSBtYXRlciBhbmQgdGhlIGluZmx1ZW5jZSBvZiBvdGhlciBkZW1vZ3JhcGhpYyBmYWN0b3JzIG1heSBtYWtlIHNwZWNpZmljIHBvcHVsYXRpb25zIG1vcmUgYXQgcmlzayBmb3IgYWR2ZXJzZSBoZWFsdGggZWZmZWN0cyBkdWUgdG8gYWlyIHBvbGx1dGlvbi4gU2VlIHRoaXMgW2FydGljbGVdKGh0dHBzOi8vd3d3Lm5lam0ub3JnL2RvaS9mdWxsLzEwLjEwNTYvTkVKTW9hMTcwMjc0Nyl7dGFyZ2V0PSJfYmxhbmsifSBmb3IgbW9yZSBkZXRhaWxzLgoKVGhlIG1vbml0b3IgZGF0YSB0aGF0IHdlIHdpbGwgdXNlIGluIHRoaXMgY2FzZSBzdHVkeSBjb21lcyBmcm9tIGEgc3lzdGVtIG9mIG1vbml0b3JzIGluIHdoaWNoIHJvdWdobHkgOTAlIGFyZSBsb2NhdGVkIHdpdGhpbiBjaXRpZXMuIFRodXMgdGhlcmUgaXMgYW4gKiplcXVpdHkgaXNzdWUqKiBpbiB0ZXJtcyBvZiBjYXB0dXJpbmcgdGhlIGFpciBwb2xsdXRpb24gbGV2ZWxzIG9mIG1vcmUgcnVyYWwgYXJlYXMuIFRoZXJlZm9yZSwgdG8gZ2V0IGEgYmV0dGVyIHNlbnNlIG9mIHRoZSBwb2xsdXRpb24gZXhwb3N1cmVzIGZvciB0aGUgaW5kaXZpZHVhbHMgbGl2aW5nIGluIHRoZXNlIGFyZWFzLCBtZXRob2RzIGxpa2UgbWFjaGluZSBsZWFybmluZyBjYW4gYmUgdmVyeSB1c2VmdWwgdG8gZXN0aW1hdGUgYWlyIHBvbGx1dGlvbiBsZXZlbHMgaW4gKiphcmVhcyB3aXRoIGxpdHRsZSB0byBubyBtb25pdG9yaW5nKiouCgpJbmRlZWQsIG1hY2hpbmUgbGVhcm5pbmcgbWV0aG9kcyBhcmUgaW4gZmFjdCB1c2VkIHRvIGJlIGFibGUgdG8gZXN0aW1hdGUgYWlyIHBvbGx1dGlvbiBpbiB0aGVzZSBsb3cgbW9uaXRvcmluZyBhcmVhcyBzbyB0aGF0IHdlIGNhbiBtYWtlIGEgbWFwIGxpa2UgdGhpcyB3aGVyZSB3ZSBoYXZlIGFubnVhbCBlc3RpbWF0ZXMgZm9yIGFsbCBvZiB0aGUgY29udGlndW91cyBVUzoKCjxwIGFsaWduPSJjZW50ZXIiPgogIDxpbWcgd2lkdGg9IjYwMCIgc3JjPSJodHRwczovL2FyYy1hbmdsZXJmaXNoLXdhc2hwb3N0LXByb2Qtd2FzaHBvc3QuczMuYW1hem9uYXdzLmNvbS9wdWJsaWMvU0FXT0VHQlhNVkdRN0FTNVBaNlVVT1g2RlkucG5nIj4KPC9wPgoKCiMjIyMjIFtbc291cmNlXV0oaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS91cmw/c2E9aSZ1cmw9aHR0cHMlM0ElMkYlMkZ3d3cud2FzaGluZ3RvbnBvc3QuY29tJTJGYnVzaW5lc3MlMkYyMDE5JTJGMTAlMkYyMyUyRmFpci1wb2xsdXRpb24taXMtZ2V0dGluZy13b3JzZS1kYXRhLXNob3ctbW9yZS1wZW9wbGUtYXJlLWR5aW5nJTJGJnBzaWc9QU92VmF3M3YtWkRUQlBuTFAyTVl0S2YzVW5kaiZ1c3Q9MTU4NTc4NDQ3OTA2ODAwMCZzb3VyY2U9aW1hZ2VzJmNkPXZmZSZ2ZWQ9MENBSVFqUnhxRndvVENQQ3luOWZ4eGVnQ0ZRQUFBQUFkQUFBQUFCQWQpCgpUaGlzIGlzIHdoYXQgd2UgYWltIHRvIGFjaGlldmUgaW4gdGhpcyBjYXNlIHN0dWR5LgoKIyMjIExpbWl0YXRpb25zCgpUaGVyZSBhcmUgc29tZSBpbXBvcnRhbnQgY29uc2lkZXJhdGlvbnMgcmVnYXJkaW5nIHRoaXMgZGF0YSBhbmFseXNpcyB0byBrZWVwIGluIG1pbmQ6IAoKMSkgVGhlIGRhdGEgaW4gb3VyIGFuYWx5c2lzIGRvZXMgbm90IGluY2x1ZGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNvbXBvc2l0aW9uIG9mIHBhcnRpY3VsYXRlIG1hdGVyLiBEaWZmZXJlbnQgdHlwZXMgb2YgcGFydGljdWxhdGVzIG1heSBiZSBtb3JlIGJlbmlnbiBvciBkZWxldGVyaW91cyBmb3IgaGVhbHRoIG91dGNvbWVzLgoKMikgT3V0ZG9vciBwb2xsdXRpb24gbGV2ZWxzIGFyZSBub3QgbmVjZXNzYXJpbHkgYW4gaW5kaWNhdGlvbiBvZiBvZiBpbmRpdmlkdWFsIGV4cG9zdXJlcy4gUGVvcGxlIHNwZW5kIGRpZmZlcmluZyBhbW91bnRzIG9mIHRpbWUgaW5kb29ycyBhbmQgb3V0ZG9vcnMgYW5kIGFyZSBleHBvc2VkIHRvIGRpZmZlcmVudCBwb2xsdXRpb24gbGV2ZWxzIGluZG9vcnMuIFBlb3BsZSBhcmUgbm93IGRldmVsb3BpbmcgcGVyc29uYWwgbW9uaXRvcmluZyBzeXN0ZW1zIHRvIHRyYWNrIGFpciBwb2xsdXRpb24gbGV2ZWxzIG9uIHRoZSBwZXJzb25hbCBsZXZlbC4KCk91ciBhbmFseXNpcyB3aWxsIHVzZSBhbm51YWwgbWVhbiBlc3RpbWF0ZXMsIGhvd2V2ZXIgcG9sbHV0aW9uIGxldmVscyBjYW4gdmFyeSBncmVhdGx5IGJ5IHNlYXNvbiwgZGF5IGFuZCBldmVuIGhvdXIuIFRoZXJlIGFyZSBkYXRhIHNvdXJjZXMgdGhhdCBoYXZlIGZpbmVyIGxldmVscyBvZiB0ZW1wb3JhbCBkYXRhLCBob3dldmVyIHdlIGFyZSBpbnRlcmVzdGVkIGluIGxvbmcgdGVybSBleHBvc3VyZXMsIGFzIHRoZXNlIGFwcGVhciB0byBiZSB0aGUgbW9zdCBpbmZsdWVudGlhbCBmb3IgaGVhbHRoIG91dGNvbWVzLCBzbyB3ZSBjaG9zZSB0byB1c2UgYW5udWFsIGxldmVsIGRhdGEuIAoKCiMjIFdoYXQgYXJlIHRoZSBkYXRhPwoKSW4gTWFjaGluZSBMZWFybmluZyBmb3IgcHJlZGljdGlvbiwgdGhlcmUgYXJlIHR3byBtYWluIHR5cGVzIG9mIHZhcmlhYmxlczoKCjEpIE91dGNvbWUgdmFyaWFibGUKMikgUHJlZGljdG9yIHZhcmlhYmxlcwoKVGhlICoqb3V0Y29tZSB2YXJpYWJsZSoqIGlzIHdoYXQgYXJlIHRyeWluZyB0byAqKnByZWRpY3QqKi4gSW4gYnVpbGRpbmcgb3VyIG1vZGVsIHdlIGFjdHVhbGx5IGhhdmUgdGhlIG91dGNvbWUgdmFyaWFibGUgZGF0YSwgYnV0IHdlIHdhbnQgdG8gc2VlIGhvdyB3ZWxsIG91ciBwcmVkaWN0b3IgdmFyaWFibGVzIGNhbiBleHBsYWluIHRoZSB2YXJpYXRpb24gaW4gb3VyIG91dGNvbWUgZGF0YS4gVGhpcyBnaXZlcyB1cyBhIHNlbnNlIG9mIGhvdyB3ZWxsIHdlIGNhbiB1c2UgdGhlIHByZWRpY3RvciB2YXJpYWJsZSBkYXRhIHRvIHByZWRpY3Qgb3VyIG91dGNvbWUgdmFyaWFibGUgbGV2ZWxzIHdoZW4gd2UgaW4gZmFjdCBkbyBub3QgaGF2ZSBkYXRhIGFib3V0IHRoZSBvdXRjb21lLgoKQXMgYSBzaW1wbGVyIGV4YW1wbGUsIGltYWdpbmUgdGhhdCB3ZSBoYXZlIGRhdGEgYWJvdXQgdGhlIHNhbGVzIGFuZCBjaGFyYWN0ZXJpc3RpY3Mgb2YgY2FycyBmcm9tIGxhc3QgeWVhciBhbmQgd2Ugd2FudCB0byBwcmVkaWN0IHdoaWNoIGNhcnMgbWlnaHQgc2VsbCB3ZWxsIHRoaXMgeWVhci4gV2UgZG8gbm90IGhhdmUgdGhlIHNhbGVzIGRhdGEgeWV0IGZvciB0aGlzIHllYXIsIGJ1dCB3ZSBkbyBrbm93IHRoZSBjaGFyYWN0ZXJpc3RpY3Mgb2Ygb3VyIGNhcnMgZm9yIHRoaXMgeWVhci4gV2UgY2FuIHVzZSBhIG1vZGVsIG9mIHRoZSBjaGFyYWN0ZXJpc3RpY3MgdGhhdCBleHBsYWluZWQgc2FsZXMgbGFzdCB5ZWFyIHRvIGVzdGltYXRlIHdoYXQgY2FycyBtaWdodCBzZWxsIHdlbGwgdGhpcyB5ZWFyLiBJbiB0aGlzIGNhc2UsIG91ciBvdXRjb21lIHZhcmlhYmxlIGlzIHRoZSBzYWxlIHBlcmZvcm1hbmNlIG9mIHRoZSBjYXJzLCB3aGlsZSB0aGUgZGlmZmVyZW50IGNoYXJhY3RlcmlzdGljcyBvZiB0aGUgY2FycyBtYWtlIHVwIG91ciBwcmVkaWN0b3Igb3IgZXhwbGFuYXRvcnkgdmFyaWFibGVzLgoKSW4gdGhpcyBjYXNlIHN0dWR5LCB3ZSB3aWxsIGV2YWx1YXRlIGFpciBwb2xsdXRpb24gbW9uaXRvciBkYXRhIG9mIGZpbmUgcGFydGljdWxhdGUgbWF0ZXIgKFBNfjIuNX4pIGluIHRoZSBjb250aWd1b3VzIFVTIGZyb20gMjAwOCwgYXMgd2VsbCBhcyBkYXRhIGFib3V0IHBvcHVsYXRpb24gZGVuc2l0eSwgcm9hZCBkZW5zaXR5LCB1cmJhbml6YXRpb24gbGV2ZWxzLCBhbmQgTkFTQSBzYXRlbGxpdGUgZGF0YSB0byBkZXZlbG9wIG1vZGVscyB0byBwcmVkaWN0IGxvY2FsaXplZCBhaXIgcG9sbHV0aW9uIGxldmVscy4gCgpUaGUgbW9uaXRvciBkYXRhIHdpbGwgYmUgb3VyICoqb3V0Y29tZSB2YXJpYWJsZSoqLiAgV2Ugd2FudCB0byBkZXRlcm1pbmUgaWYgd2UgY2FuICoqcHJlZGljdCoqIGFpciBwb2xsdXRpb24gbGV2ZWxzIGJhc2VkIG9uIG90aGVyIHR5cGVzIG9mIGRhdGEsIGxpa2Ugcm9hZCBkZW5zaXR5IGFuZCBwb3B1bGF0aW9uIGRlbnNpdHkgdG8gc2VlIGlmIHdlIGNhbiB1c2UgdGhlc2UgZGF0YSB0byBwcmVkaWN0IGFpciBwb2xsdXRpb24gaW4gYXJlYXMgd2hlcmUgdGhlcmUgYXJlIG5vIG1vbml0b3JzLiAKCgojIyMgT3VyIG91dGNvbWUgdmFyaWFibGUKClRoZSBtb25pdG9yIGRhdGEgdGhhdCB3ZSB3aWxsIGJlIHVzaW5nIGNvbWVzIGZyb20gKipbZ3JhdmltZXRyaWMgbW9uaXRvcnNdKGh0dHBzOi8vcHVibGljbGFiLm9yZy93aWtpL2ZpbHRlci1wbSl7dGFyZ2V0PSJfYmxhbmsifSoqIG9wZXJhdGVkIGJ5IHRoZSBVUyBbRW5pdm9ybm1lbnRhbCBQcm90ZWN0aW9uIEFnZW5jeSAoRVBBKV0oaHR0cHM6Ly93d3cuZXBhLmdvdi8pe3RhcmdldD0iX2JsYW5rIn0uIFRoZXNlIG1vbml0b3JzIHVzZSBhIGZpbHRyYXRpb24gc3lzdGVtIHRvIHNwZWNpZmljYWxseSBjYXB0dXJlIGZpbmUgcGFydGljdWxhdGUgbWF0dGVyLiBUaGUgd2VpZ2h0IG9mIHRoaXMgbWF0dGVyIGlzIG1hbnVhbGx5IG1lYXN1cmVkIGRhaWx5IG9yIHdlZWtseS4gU2VlIFtoZXJlXShodHRwczovL3d3dzMuZXBhLmdvdi90dG5hbXRpMS9maWxlcy9hbWJpZW50L3BtMjUvc3BlYy9SVElHcmF2TWFzc1NPUEZJTkFMLnBkZil7dGFyZ2V0PSJfYmxhbmsifSBmb3IgdGhlIEVQQSBzdGFuZGFyZCBvcGVyYXRpbmcgcHJvY2VkdXJlIGZvciBQTSBncmF2aW1ldHJpYyBhbmFseXNpcyBpbiAyMDA4LgoKCgpgYGB7ciwgZWNobyA9IEZBTFNFLCBvdXQud2lkdGg9IjE1MHB4In0Ka25pdHI6OmluY2x1ZGVfZ3JhcGhpY3MoaGVyZTo6aGVyZSgiaW1nIiwiZmlsdGVyLnBuZyIpKQpgYGAKCiMjIyMjIFtbc291cmNlXShodHRwczovL3B1YmxpY2xhYi5vcmcvd2lraS9maWx0ZXItcG0pXQoKSGVyZSBpcyBhbiBpbWFnZSBvZiB3aGF0IHRoZSBncmF2aW1ldHJpYyBtb25pdG9ycyBsb29rIGxpa2U6CgpgYGB7ciwgZWNobyA9IEZBTFNFLCBvdXQud2lkdGg9IjEwMHB4In0Ka25pdHI6OmluY2x1ZGVfZ3JhcGhpY3MoaGVyZTo6aGVyZSgiaW1nIiwibW9uaXRvci5wbmciKSkKYGBgCgoKR3JhdmltZXRyaWMgYW5hbHlzaXMgaXMgYWxzbyB1c2VkIGZvciBbZW1pc3Npb24gdGVzdGluZ10oaHR0cHM6Ly93d3cubXQuY29tL3VzL2VuL2hvbWUvYXBwbGljYXRpb25zL0xhYm9yYXRvcnlfd2VpZ2hpbmcvZW1pc3Npb25zLXRlc3RpbmctcGFydGljdWxhdGUtbWF0dGVyLmh0bWwpe3RhcmdldD0iX2JsYW5rIn0uIFRoZSBzYW1lIGlkZWEgYXBwbGllczogYSBmcmVzaCBmaWx0ZXIgaXMgYXBwbGllZCBhbmQgdGhlIGRlc2lyZWQgYW1vdW50IG9mIHRpbWUgcGFzc2VzLCB0aGVuIHRoZSBmaWx0ZXIgaXMgcmVtb3ZlZCBhbmQgd2VpZ2hlZC4gCgpUaGVyZSBhcmUgW290aGVyIG1vbml0b3Jpbmcgc3lzdGVtc10oaHR0cHM6Ly93d3cuc2Vuc2lyaW9uLmNvbS9lbi9hYm91dC11cy9uZXdzcm9vbS9zZW5zaXJpb24tc3BlY2lhbGlzdC1hcnRpY2xlcy9wYXJ0aWN1bGF0ZS1tYXR0ZXItc2Vuc2luZy1mb3ItYWlyLXF1YWxpdHktbWVhc3VyZW1lbnRzLyl7dGFyZ2V0PSJfYmxhbmsifSB0aGF0IGNhbiBwcm92aWRlIGhvdXJseSBtZWFzdXJlbWVudHMsIGJ1dCB3ZSB3aWxsIG5vdCBiZSB1c2luZyBkYXRhIGZyb20gdGhlc2UgbW9uaXRvcnMgaW4gb3VyIGFuYWx5c2lzLiBHcmF2aW1ldHJpYyBhbmFseXNpcyBpcyBjb25zaWRlcmVkIHRvIGJlIGFtb25nIHRoZSBtb3N0IGFjY3VyYXRlIG1ldGhvZHMuCgpJbiBvdXIgY3N2LCB0aGUgKip2YWx1ZSoqIGNvbHVtbiBpbmRpY2F0ZXMgdGhlIFBNfjIuNX4gbW9uaXRvciBhdmVyYWdlIGZvciAyMDA4IGluIG1hc3Mgb2YgZmluZSBwYXJ0aWNsZXMvdm9sdW1lIG9mIGFpciBmb3IgODc2IGdyYXZpbWV0cmljIG1vbml0b3JzLiBUaGUgdW5pdHMgYXJlIG1pY3JvIGdyYW1zIG9mIGZpbmUgcGFydGljdWxhdGUgbWF0ZXIgKFBNKSB0aGF0IGlzIGxlc3MgdGhhbiAyLjUgbWljcm9tZXRlcnMgaW4gZGlhbWV0ZXIgcGVyIGN1YmljIG1ldGVyIG9mIGFpciAtIG1hc3MgY29uY2VudHJhdGlvbiAodWcvbV4zXikuICBSZWNhbGwgdGhlIHRoZSBXSE8gZXhwb3N1cmUgIGd1aWRlbGluZSBpcyA8IDEwIHVnL21eM14gb24gYXZlcmFnZSBhbm51YWxseSBmb3IgUE1+Mi41fi4KCiMjIyBPdXIgcHJlZGljdG9yIHZhcmlhYmxlcwoKVGhlcmUgYXJlIDQ4IHByZWRpY3RvciB2YXJpYWJsZXMgd2l0aCB2YWx1ZXMgZm9yIGVhY2ggb2YgdGhlIDg3NiBtb25pdG9ycyBpbmNsdWRlZCBpbiBvdXIgb3V0Y29tZSB2YXJpYWJsZS4gVGhlIGRhdGEgY29tZXMgZnJvbSB0aGUgVVMgW0VuaXZvcm5tZW50YWwgUHJvdGVjdGlvbiBBZ2VuY3kgKEVQQSldKGh0dHBzOi8vd3d3LmVwYS5nb3YvKXt0YXJnZXQ9Il9ibGFuayJ9LCB0aGUgW05hdGlvbmFsIEFlcm9uYXV0aWNzIGFuZCBTcGFjZSBBZG1pbmlzdHJhdGlvbiAoTkFTQSldKGh0dHBzOi8vd3d3Lm5hc2EuZ292Lyl7dGFyZ2V0PSJfYmxhbmsifSwgdGhlIFVTIFtDZW5zdXNdKGh0dHBzOi8vd3d3LmNlbnN1cy5nb3YvYWJvdXQvd2hhdC9jZW5zdXMtYXQtYS1nbGFuY2UuaHRtbCl7dGFyZ2V0PSJfYmxhbmsifSwgYW5kIHRoZSBbTmF0aW9uYWwgQ2VudGVyIGZvciBIZWFsdGggU3RhdGlzdGljcyAoTkNIUyldKGh0dHBzOi8vd3d3LmNkYy5nb3YvbmNocy9hYm91dC9pbmRleC5odG0pe3RhcmdldD0iX2JsYW5rIn0uCgpWYXJpYWJsZSAgIHwgRGV0YWlscyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotLS0tLS0tLS0tIHwtLS0tLS0tLS0tLS0tCioqaWQqKiAgfCBNb25pdG9yIG51bWJlciAgPGJyPiAtLSB0aGUgY291bnR5IG51bWJlciBpcyBpbmRpY2F0ZWQgYmVmb3JlIHRoZSBkZWNpbWFsIDxicj4gLS0gdGhlIG1vbml0b3IgbnVtYmVyIGlzIGluZGljYXRlZCBhZnRlciB0aGUgZGVjaW1hbCA8YnI+ICAqKkV4YW1wbGUqKjogMTA3My4wMDIzICBpcyBKZWZmZXJzb24gY291bnR5ICgxMDczKSBhbmQgLjAwMjMgb25lIG9mIDggbW9uaXRvcnMgCioqZmlwcyoqIHwgRmVkZXJhbCBpbmZvcm1hdGlvbiBwcm9jZXNzaW5nIHN0YW5kYXJkIG51bWJlciBmb3IgdGhlIGNvdW50eSB3aGVyZSB0aGUgbW9uaXRvciBpcyBsb2NhdGVkIDxicj4gLS0gNSBkaWdpdCBpZCBjb2RlIGZvciBjb3VudGllcyAoemVybyBpcyBvZnRlbiB0aGUgZmlyc3QgdmFsdWUgYW5kIHNvbWV0aW1lcyBpcyBub3Qgc2hvd24pIDxicj4gLS0gdGhlIGZpcnN0IDIgbnVtYmVycyBpbmRpY2F0ZSB0aGUgc3RhdGUgPGJyPiAtLSB0aGUgbGFzdCB0aHJlZSBudW1iZXJzIGluZGljYXRlIHRoZSBjb3VudHkgPGJyPiAgKipFeGFtcGxlKio6IEFsYWJhbWEncyBzdGF0ZSBjb2RlIGlzIDAxIGJlY2F1c2UgaXQgaXMgZmlyc3QgYWxwaGFiZXRpY2FsbHkgPGJyPiAobm90ZTogQWxhc2thIGFuZCBIYXdhaWkgYXJlIG5vdCBpbmNsdWRlZCBiZWNhdXNlIHRoZXkgYXJlIG5vdCBwYXJ0IG9mIHRoZSBjb250aWd1b3VzIFVTKSAgCioqTGF0KiogfCBMYXRpdHVkZSBvZiB0aGUgbW9uaXRvciBpbiBkZWdyZWVzICAKKipMb24qKiB8IExvbmdpdHVkZSBvZiB0aGUgbW9uaXRvciBpbiBkZWdyZWVzICAKKipzdGF0ZSoqIHwgU3RhdGUgd2hlcmUgdGhlIG1vbml0b3IgaXMgbG9jYXRlZAoqKmNvdW50eSoqIHwgQ291bnR5IHdoZXJlIHRoZSBtb25pdG9yIGlzIGxvY2F0ZWQKKipjaXR5KiogfCBDaXR5IHdoZXJlIHRoZSBtb25pdG9yIGlzIGxvY2F0ZWQKKipDTUFRKiogIHwgRXN0aW1hdGVkIHZhbHVlcyBvZiBhaXIgcG9sbHV0aW9uIGZyb20gYSBjb21wdXRhdGlvbmFsIG1vZGVsIGNhbGxlZCBbKipDb21tdW5pdHkgTXVsdGlzY2FsZSBBaXIgUXVhbGl0eSAoQ01BUSkqKl0oaHR0cHM6Ly93d3cuZXBhLmdvdi9jbWFxKXt0YXJnZXQ9Il9ibGFuayJ9IDxicj4gLS0gIEEgbW9uaXRvcmluZyBzeXN0ZW0gdGhhdCBzaW11bGF0ZXMgdGhlIHBoeXNpY3Mgb2YgdGhlIGF0bW9zcGhlcmUgdXNpbmcgY2hlbWlzdHJ5IGFuZCB3ZWF0aGVyIGRhdGEgdG8gcHJlZGljdCB0aGUgYWlyIHBvbGx1dGlvbiA8YnI+IC0tICoqKkRvZXMgbm90IHVzZSBhbnkgb2YgdGhlIFBNfjIuNX4gZ3JhdmltZXRyaWMgbW9uaXRvcmluZyBkYXRhLioqKiAoVGhlcmUgaXMgYSB2ZXJzaW9uIHRoYXQgZG9lcyB1c2UgdGhlIGdyYXZpbWV0cmljIG1vbml0b3JpbmcgZGF0YSwgYnV0IG5vdCB0aGlzIG9uZSEpIDxicj4gLS0gRGF0YSBmcm9tIHRoZSBFUEEKKip6Y3RhKiogfCBbWmlwIENvZGUgVGFidWxhdGlvbiBBcmVhXShodHRwczovL3d3dzIuY2Vuc3VzLmdvdi9nZW8vcGRmcy9lZHVjYXRpb24vYnJvY2h1cmVzL1pDVEFzLnBkZil7dGFyZ2V0PSJfYmxhbmsifSB3aGVyZSB0aGUgbW9uaXRvciBpcyBsb2NhdGVkIDxicj4gLS0gUG9zdGFsIFppcCBjb2RlcyBhcmUgY29udmVydGVkIGludG8gImdlbmVyYWxpemVkIGFyZWFsIHJlcHJlc2VudGF0aW9ucyIgdGhhdCBhcmUgbm9uLW92ZXJsYXBwaW5nICA8YnI+IC0tIERhdGEgZnJvbSB0aGUgMjAxMCBDZW5zdXMgIAoqKnpjdGFfYXJlYSoqIHwgTGFuZCBhcmVhIG9mIHRoZSB6aXAgY29kZSBhcmVhIGluIG1ldGVycyBzcXVhcmVkICA8YnI+IC0tIERhdGEgZnJvbSB0aGUgMjAxMCBDZW5zdXMgIAoqKnpjdGFfcG9wKiogfCBQb3B1bGF0aW9uIGluIHRoZSB6aXAgY29kZSBhcmVhICA8YnI+IC0tIERhdGEgZnJvbSB0aGUgMjAxMCBDZW5zdXMgIAoqKmltcF9hNTAwKiogfCBJbXBlcnZpb3VzIHN1cmZhY2UgbWVhc3VyZSA8YnI+IC0tIFdpdGhpbiBhIGNpcmNsZSB3aXRoIGEgcmFkaXVzIG9mIDUwMCBtZXRlcnMgYXJvdW5kIHRoZSBtb25pdG9yIDxicj4gLS0gSW1wZXJ2aW91cyBzdXJmYWNlIGFyZSByb2FkcywgY29uY3JldGUsIHBhcmtpbmcgbG90cywgYnVpbGRpbmdzIDxicj4gLS0gVGhpcyBpcyBhIG1lYXN1cmUgb2YgZGV2ZWxvcG1lbnQgCioqaW1wX2ExMDAwKiogfCBJbXBlcnZpb3VzIHN1cmZhY2UgbWVhc3VyZSA8YnI+IC0tICBXaXRoaW4gYSBjaXJjbGUgd2l0aCBhIHJhZGl1cyBvZiAxMDAwIG1ldGVycyBhcm91bmQgdGhlIG1vbml0b3IKKippbXBfYTUwMDAqKiB8IEltcGVydmlvdXMgc3VyZmFjZSBtZWFzdXJlIDxicj4gLS0gIFdpdGhpbiBhIGNpcmNsZSB3aXRoIGEgcmFkaXVzIG9mIDUwMDAgbWV0ZXJzIGFyb3VuZCB0aGUgbW9uaXRvciAgCioqaW1wX2ExMDAwMCoqIHwgSW1wZXJ2aW91cyBzdXJmYWNlIG1lYXN1cmUgPGJyPiAtLSAgV2l0aGluIGEgY2lyY2xlIHdpdGggYSByYWRpdXMgb2YgMTAwMDAgbWV0ZXJzIGFyb3VuZCB0aGUgbW9uaXRvciAgIAoqKmltcF9hMTUwMDAqKiB8IEltcGVydmlvdXMgc3VyZmFjZSBtZWFzdXJlIDxicj4gLS0gIFdpdGhpbiBhIGNpcmNsZSB3aXRoIGEgcmFkaXVzIG9mIDE1MDAwIG1ldGVycyBhcm91bmQgdGhlIG1vbml0b3IgIAoqKmNvdW50eV9hcmVhKiogfCBMYW5kIGFyZWEgb2YgdGhlIGNvdW50eSBvZiB0aGUgbW9uaXRvciBpbiBtZXRlcnMgc3F1YXJlZCAgCioqY291bnR5X3BvcCoqIHwgUG9wdWxhdGlvbiBvZiB0aGUgY291bnR5IG9mIHRoZSBtb25pdG9yICAKKipMb2dfZGlzdF90b19wcmlzZWMqKiB8IExvZyAoTmF0dXJhbCBsb2cpIGRpc3RhbmNlIHRvIGEgcHJpbWFyeSBvciBzZWNvbmRhcnkgcm9hZCBmcm9tIHRoZSBtb25pdG9yIDxicj4gLS0gSGlnaHdheSBvciBtYWpvciByb2FkICAKKipsb2dfcHJpX2xlbmd0aF81MDAwKiogfCBDb3VudCBvZiBwcmltYXJ5IHJvYWQgbGVuZ3RoIGluIG1ldGVycyBpbiBhIGNpcmNsZSB3aXRoIGEgcmFkaXVzIG9mIDUwMDAgbWV0ZXJzIGFyb3VuZCB0aGUgbW9uaXRvciAoTmF0dXJhbCBsb2cpIDxicj4gLS0gSGlnaHdheXMgb25seSAgCioqbG9nX3ByaV9sZW5ndGhfMTAwMDAqKiB8IENvdW50IG9mIHByaW1hcnkgcm9hZCBsZW5ndGggaW4gbWV0ZXJzIGluIGEgY2lyY2xlIHdpdGggYSByYWRpdXMgb2YgMTAwMDAgbWV0ZXJzIGFyb3VuZCB0aGUgbW9uaXRvciAoTmF0dXJhbCBsb2cpIDxicj4gLS0gSGlnaHdheXMgb25seSAgCioqbG9nX3ByaV9sZW5ndGhfMTUwMDAqKiB8IENvdW50IG9mIHByaW1hcnkgcm9hZCBsZW5ndGggaW4gbWV0ZXJzIGluIGEgY2lyY2xlIHdpdGggYSByYWRpdXMgb2YgMTUwMDAgbWV0ZXJzIGFyb3VuZCB0aGUgbW9uaXRvciAoTmF0dXJhbCBsb2cpIDxicj4gLS0gSGlnaHdheXMgb25seSAgCioqbG9nX3ByaV9sZW5ndGhfMjUwMDAqKiB8IENvdW50IG9mIHByaW1hcnkgcm9hZCBsZW5ndGggaW4gbWV0ZXJzIGluIGEgY2lyY2xlIHdpdGggYSByYWRpdXMgb2YgMjUwMDAgbWV0ZXJzIGFyb3VuZCB0aGUgbW9uaXRvciAoTmF0dXJhbCBsb2cpIDxicj4gLS0gSGlnaHdheXMgb25seSAgCioqbG9nX3ByaXNlY19sZW5ndGhfNTAwKiogfCBDb3VudCBvZiBwcmltYXJ5IGFuZCBzZWNvbmRhcnkgcm9hZCBsZW5ndGggaW4gbWV0ZXJzIGluIGEgY2lyY2xlIHdpdGggYSByYWRpdXMgb2YgNTAwIG1ldGVycyBhcm91bmQgdGhlIG1vbml0b3IgKE5hdHVyYWwgbG9nKSAgPGJyPiAtLSBIaWdod2F5IGFuZCBzZWNvbmRhcnkgcm9hZHMgIAoqKmxvZ19wcmlzZWNfbGVuZ3RoXzEwMDAqKiB8IENvdW50IG9mIHByaW1hcnkgYW5kIHNlY29uZGFyeSByb2FkIGxlbmd0aCBpbiBtZXRlcnMgaW4gYSBjaXJjbGUgd2l0aCBhIHJhZGl1cyBvZiAxMDAwIG1ldGVycyBhcm91bmQgdGhlIG1vbml0b3IgKE5hdHVyYWwgbG9nKSAgPGJyPiAtLSBIaWdod2F5IGFuZCBzZWNvbmRhcnkgcm9hZHMgIAoqKmxvZ19wcmlzZWNfbGVuZ3RoXzUwMDAqKiB8IENvdW50IG9mIHByaW1hcnkgYW5kIHNlY29uZGFyeSByb2FkIGxlbmd0aCBpbiBtZXRlcnMgaW4gYSBjaXJjbGUgd2l0aCBhIHJhZGl1cyBvZiA1MDAwIG1ldGVycyBhcm91bmQgdGhlIG1vbml0b3IgKE5hdHVyYWwgbG9nKSAgPGJyPiAtLSBIaWdod2F5IGFuZCBzZWNvbmRhcnkgcm9hZHMgIAoqKmxvZ19wcmlzZWNfbGVuZ3RoXzEwMDAwKiogfCBDb3VudCBvZiBwcmltYXJ5IGFuZCBzZWNvbmRhcnkgcm9hZCBsZW5ndGggaW4gbWV0ZXJzIGluIGEgY2lyY2xlIHdpdGggYSByYWRpdXMgb2YgMTAwMDAgbWV0ZXJzIGFyb3VuZCB0aGUgbW9uaXRvciAoTmF0dXJhbCBsb2cpICA8YnI+IC0tIEhpZ2h3YXkgYW5kIHNlY29uZGFyeSByb2FkcyAgCioqbG9nX3ByaXNlY19sZW5ndGhfMTUwMDAqKiB8IENvdW50IG9mIHByaW1hcnkgYW5kIHNlY29uZGFyeSByb2FkIGxlbmd0aCBpbiBtZXRlcnMgaW4gYSBjaXJjbGUgd2l0aCBhIHJhZGl1cyBvZiAxNTAwMCBtZXRlcnMgYXJvdW5kIHRoZSBtb25pdG9yIChOYXR1cmFsIGxvZykgIDxicj4gLS0gSGlnaHdheSBhbmQgc2Vjb25kYXJ5IHJvYWRzICAKKipsb2dfcHJpc2VjX2xlbmd0aF8yNTAwMCoqIHwgQ291bnQgb2YgcHJpbWFyeSBhbmQgc2Vjb25kYXJ5IHJvYWQgbGVuZ3RoIGluIG1ldGVycyBpbiBhIGNpcmNsZSB3aXRoIGEgcmFkaXVzIG9mIDI1MDAwIG1ldGVycyBhcm91bmQgdGhlIG1vbml0b3IgKE5hdHVyYWwgbG9nKSAgPGJyPiAtLSBIaWdod2F5IGFuZCBzZWNvbmRhcnkgcm9hZHMgICAgICAKKipsb2dfbmVpXzIwMDhfcG0yNV9zdW1fMTAwMDAqKiB8IFRvbnMgb2YgZW1pc3Npb25zIGZyb20gbWFqb3Igc291cmNlcyBkYXRhIGJhc2UgKGFubnVhbCBkYXRhKSBzdW0gb2YgYWxsIHNvdXJjZXMgd2l0aGluIGEgY2lyY2xlIHdpdGggYSByYWRpdXMgb2YgMTAwMDAgbWV0ZXJzIG9mIGRpc3RhbmNlIGFyb3VuZCB0aGUgbW9uaXRvciAoTmF0dXJhbCBsb2cpICAgIAoqKmxvZ19uZWlfMjAwOF9wbTI1X3N1bV8xNTAwMCoqIHwgVG9ucyBvZiBlbWlzc2lvbnMgZnJvbSBtYWpvciBzb3VyY2VzIGRhdGEgYmFzZSAoYW5udWFsIGRhdGEpIHN1bSBvZiBhbGwgc291cmNlcyB3aXRoaW4gYSBjaXJjbGUgd2l0aCBhIHJhZGl1cyBvZiAxNTAwMCBtZXRlcnMgb2YgZGlzdGFuY2UgYXJvdW5kIHRoZSBtb25pdG9yIChOYXR1cmFsIGxvZykgICAgIAoqKmxvZ19uZWlfMjAwOF9wbTI1X3N1bV8yNTAwMCoqIHwgVG9ucyBvZiBlbWlzc2lvbnMgZnJvbSBtYWpvciBzb3VyY2VzIGRhdGEgYmFzZSAoYW5udWFsIGRhdGEpIHN1bSBvZiBhbGwgc291cmNlcyB3aXRoaW4gYSBjaXJjbGUgd2l0aCBhIHJhZGl1cyBvZiAyNTAwMCBtZXRlcnMgb2YgZGlzdGFuY2UgYXJvdW5kIHRoZSBtb25pdG9yIChOYXR1cmFsIGxvZykgICAgIAoqKmxvZ19uZWlfMjAwOF9wbTEwX3N1bV8xMDAwMCoqIHwgVG9ucyBvZiBlbWlzc2lvbnMgZnJvbSBtYWpvciBzb3VyY2VzIGRhdGEgYmFzZSAoYW5udWFsIGRhdGEpIHN1bSBvZiBhbGwgc291cmNlcyB3aXRoaW4gYSBjaXJjbGUgd2l0aCBhIHJhZGl1cyBvZiAxMDAwMCBtZXRlcnMgb2YgZGlzdGFuY2UgYXJvdW5kIHRoZSBtb25pdG9yIChOYXR1cmFsIGxvZykgICAgICAKKipsb2dfbmVpXzIwMDhfcG0xMF9zdW1fMTUwMDAqKnwgVG9ucyBvZiBlbWlzc2lvbnMgZnJvbSBtYWpvciBzb3VyY2VzIGRhdGEgYmFzZSAoYW5udWFsIGRhdGEpIHN1bSBvZiBhbGwgc291cmNlcyB3aXRoaW4gYSBjaXJjbGUgd2l0aCBhIHJhZGl1cyBvZiAxNTAwMCBtZXRlcnMgb2YgZGlzdGFuY2UgYXJvdW5kIHRoZSBtb25pdG9yIChOYXR1cmFsIGxvZykgICAgICAKKipsb2dfbmVpXzIwMDhfcG0xMF9zdW1fMjUwMDAqKiB8IFRvbnMgb2YgZW1pc3Npb25zIGZyb20gbWFqb3Igc291cmNlcyBkYXRhIGJhc2UgKGFubnVhbCBkYXRhKSBzdW0gb2YgYWxsIHNvdXJjZXMgd2l0aGluIGEgY2lyY2xlIHdpdGggYSByYWRpdXMgb2YgMjUwMDAgbWV0ZXJzIG9mIGRpc3RhbmNlIGFyb3VuZCB0aGUgbW9uaXRvciAoTmF0dXJhbCBsb2cpICAgICAgCioqcG9wZGVuc19jb3VudHkqKiB8IFBvcHVsYXRpb24gZGVuc2l0eSAobnVtYmVyIG9mIHBlb3BsZSBwZXIga2lsb21ldGVyIHNxdWFyZWQgYXJlYSBvZiB0aGUgY291bnR5KQoqKnBvcGRlbnNfemN0YSoqIHwgUG9wdWxhdGlvbiBkZW5zaXR5IChudW1iZXIgb2YgcGVvcGxlIHBlciBraWxvbWV0ZXIgc3F1YXJlZCBhcmVhIG9mIHpjdGEpCioqbm9ocyoqIHwgUGVyY2VudGFnZSBvZiBwZW9wbGUgaW4gemN0YSBhcmVhIHdoZXJlIHRoZSBtb25pdG9yIGlzIHRoYXQgKipkbyBub3QgaGF2ZSBhIGhpZ2ggc2Nob29sIGRlZ3JlZSoqIDxicj4gLS0gRGF0YSBmcm9tIHRoZSBDZW5zdXMKKipzb21laHMqKiB8IFBlcmNlbnRhZ2Ugb2YgcGVvcGxlIGluIHpjdGEgYXJlYSB3aGVyZSB0aGUgbW9uaXRvciB3aG9zZSBoaWdoZXN0IGZvcm1hbCBlZHVjYXRpb25hbCBhdHRhaW5tZW50IHdhcyAqKnNvbWUgaGlnaCBzY2hvb2wgZWR1Y2F0aW9uKiogPGJyPiAtLSBEYXRhIGZyb20gdGhlIENlbnN1cwoqKmhzKiogfCBQZXJjZW50YWdlIG9mIHBlb3BsZSBpbiB6Y3RhIGFyZWEgd2hlcmUgdGhlIG1vbml0b3Igd2hvc2UgaGlnaGVzdCBmb3JtYWwgZWR1Y2F0aW9uYWwgYXR0YWlubWVudCB3YXMgY29tcGxldGluZyBhICoqaGlnaCBzY2hvb2wgZGVncmVlKiogPGJyPiAtLSBEYXRhIGZyb20gdGhlIENlbnN1cyAgCioqc29tZWNvbGxlZ2UqKiB8IFBlcmNlbnRhZ2Ugb2YgcGVvcGxlIGluIHpjdGEgYXJlYSB3aGVyZSB0aGUgbW9uaXRvciB3aG9zZSBoaWdoZXN0IGZvcm1hbCBlZHVjYXRpb25hbCBhdHRhaW5tZW50IHdhcyBjb21wbGV0aW5nICoqc29tZSBjb2xsZWdlIGVkdWNhdGlvbioqIDxicj4gLS0gRGF0YSBmcm9tIHRoZSBDZW5zdXMgCioqYXNzb2NpYXRlKiogfCBQZXJjZW50YWdlIG9mIHBlb3BsZSBpbiB6Y3RhIGFyZWEgd2hlcmUgdGhlIG1vbml0b3Igd2hvc2UgaGlnaGVzdCBmb3JtYWwgZWR1Y2F0aW9uYWwgYXR0YWlubWVudCB3YXMgY29tcGxldGluZyBhbiAqKmFzc29jaWF0ZSBkZWdyZWUqKiA8YnI+IC0tIERhdGEgZnJvbSB0aGUgQ2Vuc3VzIAoqKmJhY2hlbG9yKiogfCBQZXJjZW50YWdlIG9mIHBlb3BsZSBpbiB6Y3RhIGFyZWEgd2hlcmUgdGhlIG1vbml0b3Igd2hvc2UgaGlnaGVzdCBmb3JtYWwgZWR1Y2F0aW9uYWwgYXR0YWlubWVudCB3YXMgYSAqKmJhY2hlbG9yJ3MgZGVncmVlKiogPGJyPiAtLSBEYXRhIGZyb20gdGhlIENlbnN1cyAKKipncmFkKiogfCBQZXJjZW50YWdlIG9mIHBlb3BsZSBpbiB6Y3RhIGFyZWEgd2hlcmUgdGhlIG1vbml0b3Igd2hvc2UgaGlnaGVzdCBmb3JtYWwgZWR1Y2F0aW9uYWwgYXR0YWlubWVudCB3YXMgYSAqKmdyYWR1YXRlIGRlZ3JlZSoqIDxicj4gLS0gRGF0YSBmcm9tIHRoZSBDZW5zdXMgCioqcG92KiogfCBQZXJjZW50YWdlIG9mIHBlb3BsZSBpbiB6Y3RhIGFyZWEgd2hlcmUgdGhlIG1vbml0b3IgaXMgdGhhdCBsaXZlZCBpbiBbKipwb3ZlcnR5KipdKGh0dHBzOi8vYXNwZS5oaHMuZ292LzIwMDgtaGhzLXBvdmVydHktZ3VpZGVsaW5lcykgaW4gMjAwOCAtIG9yIHdvdWxkIGl0IGhhdmUgYmVlbiAyMDA3IGd1aWRlbGluZXM/P2h0dHBzOi8vYXNwZS5oaHMuZ292LzIwMDctaGhzLXBvdmVydHktZ3VpZGVsaW5lcyA8YnI+IC0tIERhdGEgZnJvbSB0aGUgQ2Vuc3VzICAKKipoc19vcmxlc3MqKiB8ICBQZXJjZW50YWdlIG9mIHBlb3BsZSBpbiB6Y3RhIGFyZWEgd2hlcmUgdGhlIG1vbml0b3Igd2hvc2UgaGlnaGVzdCBmb3JtYWwgZWR1Y2F0aW9uYWwgYXR0YWlubWVudCB3YXMgYSAqKmhpZ2ggc2Nob29sIGRlZ3JlZSBvciBsZXNzKiogKHN1bSBvZiBub2hzLCBzb21laHMsIGFuZCBocykgIAoqKnVyYzIwMTMqKiB8IFsyMDEzIFVyYmFuLXJ1cmFsIGNsYXNzaWZpY2F0aW9uXShodHRwczovL3d3dy5jZGMuZ292L25jaHMvZGF0YS9zZXJpZXMvc3JfMDIvc3IwMl8xNjYucGRmKXt0YXJnZXQ9Il9ibGFuayJ9IG9mIHRoZSBjb3VudHkgd2hlcmUgdGhlIG1vbml0b3IgaXMgbG9jYXRlZCA8YnI+IC0tIDYgY2F0ZWdvcnkgdmFyaWFibGUgLSAxIGlzIHRvdGFsbHkgdXJiYW4gNiBpcyBjb21wbGV0ZWx5IHJ1cmFsIDxicj4gIC0tIERhdGEgZnJvbSB0aGUgTmF0aW9uYWwgQ2VudGVyIGZvciBIZWFsdGggU3RhdGlzdGljc10oaHR0cHM6Ly93d3cuY2RjLmdvdi9uY2hzL2luZGV4Lmh0bSl7dGFyZ2V0PSJfYmxhbmsifSAgICAgCioqdXJjMjAwNioqIHwgWzIwMDYgVXJiYW4tcnVyYWwgY2xhc3NpZmljYXRpb25dKGh0dHBzOi8vd3d3LmNkYy5nb3YvbmNocy9kYXRhL3Nlcmllcy9zcl8wMi9zcjAyXzE1NC5wZGYpe3RhcmdldD0iX2JsYW5rIn0gb2YgdGhlIGNvdW50eSB3aGVyZSB0aGUgbW9uaXRvciBpcyBsb2NhdGVkIDxicj4gLS0gNiBjYXRlZ29yeSB2YXJpYWJsZSAtIDEgaXMgdG90YWxseSB1cmJhbiA2IGlzIGNvbXBsZXRlbHkgcnVyYWwgPGJyPiAtLSBEYXRhIGZyb20gdGhlIFtOYXRpb25hbCBDZW50ZXIgZm9yIEhlYWx0aCBTdGF0aXN0aWNzXShodHRwczovL3d3dy5jZGMuZ292L25jaHMvaW5kZXguaHRtKXt0YXJnZXQ9Il9ibGFuayJ9ICAgICAKKiphb2QqKiB8IEFlcm9zb2wgT3B0aWNhbCBEZXB0aCBtZWFzdXJlbWVudCBmcm9tIGEgTkFTQSBzYXRlbGxpdGUgPGJyPiAtLSBiYXNlZCBvbiB0aGUgZGVmcmFjdGlvbiBvZiBhIGxhc2VyIDxicj4gLS0gdXNlZCBhcyBhIHByb3h5IG9mIHBhcnRpY3VsYXRlIHBvbGx1dGlvbiA8YnI+IC0tIHVuaXQtbGVzcyAtIGhpZ2hlciB2YWx1ZSBpbmRpY2F0ZXMgbW9yZSBwb2xsdXRpb24gPGJyPiAtLSBEYXRhIGZyb20gTkFTQSAgCgpNYW55IG9mIHRoZXNlIHByZWRpY3RvciB2YXJpYWJsZXMgaGF2ZSB0byBkbyB3aXRoIHRoZSBjaXJjdWxhciBhcmVhIGFyb3VuZCB0aGUgbW9uaXRvciBjYWxsZWQgdGhlICJidWZmZXIiLiBUaGVzZSBhcmUgaWxsdXN0cmF0ZWQgaW4gdGhlIGZvbGxvd2luZyBmaWd1cmU6CgpgYGB7ciwgZWNobyA9IEZBTFNFLCBvdXQud2lkdGggPSAiODAwcHgiLH0Ka25pdHI6OmluY2x1ZGVfZ3JhcGhpY3MoaGVyZTo6aGVyZSgiaW1nIiwgInJlZ3Jlc3Npb24ucG5nIikpCmBgYAoKIyMjIyMgW1tzb3VyY2VdKGh0dHBzOi8vd3d3Lm5jYmkubmxtLm5paC5nb3YvcHVibWVkLzE1MjkyOTA2KV0KCgoKIyMgRGF0YSBJbXBvcnQKCldlIGhhdmUgb25lIENTViBmaWxlIHRoYXQgY29udGFpbnMgYm90aCBvdXIgc2luZ2xlICoqb3V0Y29tZSB2YXJpYWJsZSoqIGFuZCBhbGwgb2Ygb3VyICoqcHJlZGljdG9yIHZhcmlhYmxlcyoqLgoKTGV0J3MgaW1wb3J0IG91ciBkYXRhIGludG8gUiBub3cgc28gdGhhdCB3ZSBjYW4gZXhwbG9yZSB0aGUgZGF0YSBmdXJ0aGVyLiBXZSB3aWxsIGNhbGwgb3VyIGRhdGEgb2JqZWN0IGBwbWAgZm9yIHBhcnRpY3VsYXRlIG1hdHRlci4KCmBgYHtyfQpwbSA8LXJlYWRyOjpyZWFkX2NzdihoZXJlKCJkb2NzIiwgInBtMjVfZGF0YS5jc3YiKSkKYGBgCgojIyBEYXRhIEV4cGxvcmF0aW9uIGFuZCBXcmFuZ2xpbmcKClRoZSBmaXJzdCBzdGVwIGluIHBlcmZvcm1pbmcgYSBtYWNoaW5lIGxlYXJuaW5nIGFuYWx5c2lzIGlzIHRvIGV4cGxvcmUgdGhlIGRhdGEgdG8gYmV0dGVyIHVuZGVyc3RhbmQgdGhlIHZhcmlhYmxlcyAgaW5jbHVkZWQgaW4gdGhlIGRhdGEsIGFzIHdlIG1heSBsZWFybiBhYm91dCBpbXBvcnRhbnQgZGV0YWlscyBhYm91dCB0aGUgZGF0YSB0aGF0IHdlIHNob3VsZCBrZWVwIGluIG1pbmQgYXMgd2UgdHJ5IHRvIHByZWRpY3Qgb3VyIG91dGNvbWUgdmFyaWFibGUuCgpGaXJzdCBsZXQncyBqdXN0IGdldCBhIGdlbmVyYWwgc2Vuc2Ugb2Ygb3VyIGRhdGEuIFdlIGNhbiBkbyB0aGF0IHVzaW5nIHRoZSBgZ2xpbXBzZSgpYCBmdW5jdGlvbiBvZiB0aGUgYGRwbHlyYCBwYWNrYWdlIChpdCBpcyBhbHNvIGluIHRoZSBgdGliYmxlYCBwYWNrYWdlKS4KCldlIHdpbGwgYWxzbyB1c2UgdGhlIGAlPiVgIHBpcGUgd2hpY2ggY2FuIGJlIHVzZWQgdG8gZGVmaW5lIHRoZSBpbnB1dCBmb3IgbGF0ZXIgc2VxdWVudGlhbCBzdGVwcy4gVGhpcyB3aWxsIG1ha2UgbW9yZSBzZW5zZSB3aGVuIHdlIGhhdmUgbXVsdGlwbGUgc2VxdWVudGlhbCBzdGVwcyB1c2luZyB0aGUgc2FtZSBkYXRhIG9iamVjdC4gVG8gdXNlIHRoZSBwaXBlIG5vdGF0aW9uIHdlIG5lZWQgdG8gaW5zdGFsbCBhbmQgbG9hZCBkcGx5ciBhcyB3ZWxsLgoKRm9yIGV4YW1wbGUgaGVyZSB3ZSB3aWxsIGZpcnN0IGdyYWIgdGhlIGBwbWAgZGF0YSBvYmplY3QsIHRoZW4gd2UgdXNlIHRoZSBgZ2xpbXBzZSgpYCBmdW5jdGlvbiBvbiBpdCBiYXNlZCBvbiB0aGUgcGlwZSBub3RhdGlvbi4KCgpgYGB7cn0KcG0gJT4lCiAgZHBseXI6OmdsaW1wc2UoKQpgYGAKCldlIGNhbiBzZWUgdGhhdCB0aGVyZSBhcmUgODc2IG1vbml0b3JzIGFuZCB0aGF0IHdlIGhhdmUgNTAgdG90YWwgdmFyaWFibGVzIC0gb25lIG9mIHdoaWNoIGlzIHRoZSBvdXRjb21lLiBJbiB0aGlzIGNhc2Ugb3VyIG91dGNvbWUgdmFyaWFibGUgaXMgY2FsbGVkIGB2YWx1ZWAuIAoKTm90aWNlIHRoYXQgc29tZSBvZiB0aGUgdmFyaWFibGVzIHRoYXQgd2Ugd291bGQgdGhpbmsgb2YgYXMgZmFjdG9ycyAoY2F0ZWdvcmljYWwpIGFyZSBjdXJyZW50bHkgb2YgY2xhc3MgZG91YmxlIGFzIGluZGljYXRlZCBieSB0aGUgYDxkYmw+YCBqdXN0IHRvIHRoZSByaWdodCBvZiB0aGUgY29sdW1uIG5hbWVzL3ZhcmlhYmxlIG5hbWVzIGluIHRoZSBgZ2xpbXBzZSgpYCBvdXRwdXQuIEZvciBleGFtcGxlIHRoZSBtb25pdG9yIElEIChpZCksIHRoZSBGZWRlcmFsIEluZm9ybWF0aW9uIFByb2Nlc3NpbmcgU3RhbmRhcmQgbnVtYmVyIGZvciB0aGUgY291bnR5IHdoZXJlIHRoZSBtb25pdG9yIHdhcyBsb2NhdGVkIChmaXBzKSwgYXMgd2VsbCBhcyB0aGUgemN0YQoKTGV0J3MgY29udmVydCB0aGVzZSB2YXJpYWJsZXMgaW50byBmYWN0b3JzLiBXZSBjYW4gZG8gdGhpcyB1c2luZyB0aGUgYG11dGF0ZV9hdCgpYCBmdW5jdGlvbiBvZiB0aGUgYGRwbHlyYCBwYWNrYWdlIGFuZCB0aGUgYGFzLmZhY3RvcigpYCBiYXNlIGZ1bmN0aW9uLiAKCkluIHRoaXMgY2FzZSB3ZSBhcmUgYWxzbyB1c2luZyB0aGUgbWFncml0dHIgYXNzaWdubWVudCBwaXBlIG9yIGRvdWJsZSBwaXBlIHRoYXQgbG9va3MgbGlrZSB0aGlzIGAlPD4lYCBvZiB0aGUgYG1hZ3JpdHRyYCBwYWNrYWdlLiBUaGlzIGFsbG93cyB1cyB1c2UgdGhlIGBwbWAgZGF0YSBhcyBpbnB1dCBidXQgYWxzbyByZWFzc2lnbiB0aGUgb3V0cHV0IHRvIHRoZSBzYW1lIGRhdGEgb2JqZWN0IG5hbWUuCgpgYGB7cn0KcG0gJTw+JQogIGRwbHlyOjptdXRhdGVfYXQodmFycyhpZCwgZmlwcywgemN0YSksIGFzLmZhY3RvcikgCgpnbGltcHNlKHBtKQpgYGAKCkdyZWF0ISBOb3cgd2UgY2FuIHNlZSB0aGF0IHRoZXNlIHZhcmlhYmxlcyBhcmUgbm93IGZhY3RvcnMgYXMgaW5kaWNhdGVkIGJ5IGA8ZmN0PmAgYWZ0ZXIgdGhlIHZhcmlhYmxlIG5hbWUuCgpUaGUgYHNraW0oKWAgZnVuY3Rpb24gb2YgdGhlIGBza2ltcmAgcGFja2FnZSBpcyBhbHNvIHJlYWxseSBoZWxwZnVsIGZvciBnZXR0aW5nIGEgZ2VuZXJhbCBzZW5zZSBvZiB5b3VyIGRhdGEuCgpgYGB7cn0Kc2tpbShwbSkKYGBgCgpOb3RpY2UgaG93IHRoZXJlIGlzIGEgY29sdW1uIGNhbGxlZCBgbl9taXNzaW5nYCBhYm91dCB0aGUgbnVtYmVyIG9mIHZhbHVlcyB0aGF0IGFyZSBtaXNzaW5nLiBJdCBsb29rcyBsaWtlIG91ciBkYXRhIGlzIHZlcnkgY29tcGxldGUgYW5kIHdlIGRvIG5vdCBoYXZlIGFueSBtaXNzaW5nIGRhdGEuIFRoaXMgaXMgYWxzbyBpbmRpY2F0ZWQgYnkgdGhlIGBjb21wbGV0ZV9yYXRlYCB2YXJpYWJsZSwgd2hpY2ggc2hvd3MgdGhlIHJhdGlvIG9mIGNvbXBsZXRlbmVzcywgaW4gb3VyIGNhc2UgYWxsIHZhcmlhYmxlcyBoYXZlIGEgdmFsdWUgb2YgMSBpbmRpY2F0aW5nIHRoZXkgYXJlIGZ1bGx5IGNvbXBsZXRlLgoKVGhlIGBuX3VucWl1ZWAgY29sdW1uIHNob3dzIHVzIHRoZSBudW1iZXIgb2YgdW5pcXVlIHZhbHVlcyBmb3IgZWFjaCBvZiBvdXIgY29sdW1ucy4gV2UgY2FuIHNlZSB0aGF0IHRoZXJlIGFyZSA0OSBzdGF0ZXMgcmVwcmVzZW50ZWQgaW4gdGhlIGRhdGEsIGFuZCB3ZSBrbm93IHRoYXQgdGhlIGRhdGEgc2hvdWxkIGJlIG9mIHRoZSBjb250aWd1b3VzIHN0YXRlcy4gTGV0J3MgdGFrZSBhIGxvb2sgdG8gc2VlIHdoaWNoIHN0YXRlcyBhcmUgaW5jbHVkZWQ6CgojIyMjIHsuc2Nyb2xsYWJsZSB9CmBgYHtyfQojIFNjcm9sbCB0aHJvdWdoIHRoZSBvdXRwdXQhCnBtICU+JSAKICBkaXN0aW5jdChzdGF0ZSkgJT4lCiAgcHJpbnQobiA9IDFlMykKYGBgCiMjIyMKCkxvb2tzIGxpa2UgIkRpc3RyaWN0IG9mIENvbHVtYmlhIiBpcyBiZWluZyBpbmNsdWRlZCBhcyBhIHN0YXRlLiBXZSBjYW4gc2VlIHRoYXQgaW5kZWVkIEFsYXNrYSBhbmQgSGF3YWlpIGFyZSBub3QgaW5jbHVkZWQgaW4gdGhlIGRhdGEuCgpIZXJlIGlzIGFub3RoZXIgbWV0aG9kIG9mIGxvb2tpbmcgYXQgdGhlIGRhdGEgdXNpbmcgdGhlIGBkZlN1bW1hcnkoKWAgZnVuY3Rpb24gb2YgdGhlIGBzdW1tYXJ5dG9vbHNgcGFja2FnZS4gV2UgbmVlZCB0byBjb3B5IGFuZCBwYXN0ZSB0aGUgb3V0cHV0IGludG8gdGhlIHJtYXJrZG93bi4KCmBgYHtyLCBldmFsID0gRkFMU0V9CmRmU3VtbWFyeShwbSwgcGxhaW4uYXNjaWkgPSBGQUxTRSwgc3R5bGUgPSAiZ3JpZCIsIAogICAgICAgICAgZ3JhcGgubWFnbmlmID0gMC40NSwgIHRtcC5pbWcuZGlyID0gInRtcCIpCmBgYAoKKipEaW1lbnNpb25zOioqIDg3NiB4IDUwICAKKipEdXBsaWNhdGVzOioqIDAgIAoKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCBObyB8IFZhcmlhYmxlICAgICAgICAgICAgICAgICAgICAgfCBTdGF0cyAvIFZhbHVlcyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRnJlcXMgKCUgb2YgVmFsaWQpICB8IEdyYXBoICAgICAgICAgICAgICAgfCBWYWxpZCAgfCBNaXNzaW5nIHwKKz09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09Kz09PT09PT09PSsKfCAxICB8IGlkXCAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxXC4gMTAwMy4wMDFcICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMSAoIDAuMSUpXCAgICAgICAgICB8ICFbXSh0bXAvZHMwMTAxLnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtmYWN0b3JdICAgICAgICAgICAgICAgICAgICAgfCAyXC4gMTAyNy4wMDAxXCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMSAoIDAuMSUpXCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzXC4gMTAzMy4xMDAyXCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMSAoIDAuMSUpXCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA0XC4gMTA0OS4xMDAzXCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMSAoIDAuMSUpXCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA1XC4gMTA1NS4wMDFcICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMSAoIDAuMSUpXCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA2XC4gMTA2OS4wMDAzXCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMSAoIDAuMSUpXCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA3XC4gMTA3My4wMDIzXCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMSAoIDAuMSUpXCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA4XC4gMTA3My4xMDA1XCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMSAoIDAuMSUpXCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA5XC4gMTA3My4xMDA5XCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMSAoIDAuMSUpXCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMFwuIDEwNzMuMTAxXCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMSAoIDAuMSUpXCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbIDg2NiBvdGhlcnMgXSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgODY2ICg5OC45JSkgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCAyICB8IHZhbHVlXCAgICAgICAgICAgICAgICAgICAgICAgfCBNZWFuIChzZCkgOiAxMC44ICgyLjYpXCAgICAgICAgICAgICAgICAgIHwgODc1IGRpc3RpbmN0IHZhbHVlcyB8ICFbXSh0bXAvZHMwMTAyLnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtudW1lcmljXSAgICAgICAgICAgICAgICAgICAgfCBtaW4gPCBtZWQgPCBtYXg6XCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzIDwgMTEuMiA8IDIzLjJcICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJUVIgKENWKSA6IDMuMSAoMC4yKSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCAzICB8IGZpcHNcICAgICAgICAgICAgICAgICAgICAgICAgfCAxXC4gMTAwM1wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMSAoIDAuMSUpXCAgICAgICAgICB8ICFbXSh0bXAvZHMwMTAzLnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtmYWN0b3JdICAgICAgICAgICAgICAgICAgICAgfCAyXC4gMTAyN1wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMSAoIDAuMSUpXCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzXC4gMTAzM1wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMSAoIDAuMSUpXCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA0XC4gMTA0OVwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMSAoIDAuMSUpXCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA1XC4gMTA1NVwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMSAoIDAuMSUpXCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA2XC4gMTA2OVwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMSAoIDAuMSUpXCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA3XC4gMTA3M1wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgOCAoIDAuOSUpXCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA4XC4gMTA4OVwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMSAoIDAuMSUpXCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA5XC4gMTA5N1wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMiAoIDAuMiUpXCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMFwuIDExMDFcICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMSAoIDAuMSUpXCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbIDU1OSBvdGhlcnMgXSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgODU4ICg5OC4wJSkgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCA0ICB8IGxhdFwgICAgICAgICAgICAgICAgICAgICAgICAgfCBNZWFuIChzZCkgOiAzOC41ICg0LjYpXCAgICAgICAgICAgICAgICAgIHwgODc2IGRpc3RpbmN0IHZhbHVlcyB8ICFbXSh0bXAvZHMwMTA0LnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtudW1lcmljXSAgICAgICAgICAgICAgICAgICAgfCBtaW4gPCBtZWQgPCBtYXg6XCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyNS41IDwgMzkuMyA8IDQ4LjRcICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJUVIgKENWKSA6IDYuNiAoMC4xKSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCA1ICB8IGxvblwgICAgICAgICAgICAgICAgICAgICAgICAgfCBNZWFuIChzZCkgOiAtOTEuNyAoMTUpXCAgICAgICAgICAgICAgICAgIHwgODc2IGRpc3RpbmN0IHZhbHVlcyB8ICFbXSh0bXAvZHMwMTA1LnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtudW1lcmljXSAgICAgICAgICAgICAgICAgICAgfCBtaW4gPCBtZWQgPCBtYXg6XCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAtMTI0LjIgPCAtODcuNSA8IC02OFwgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJUVIgKENWKSA6IDE4LjUgKC0wLjIpICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCA2ICB8IHN0YXRlXCAgICAgICAgICAgICAgICAgICAgICAgfCAxXC4gQ2FsaWZvcm5pYVwgICAgICAgICAgICAgICAgICAgICAgICAgIHwgODUgKCA5LjclKVwgICAgICAgICB8ICFbXSh0bXAvZHMwMTA2LnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtjaGFyYWN0ZXJdICAgICAgICAgICAgICAgICAgfCAyXC4gT2hpb1wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNDQgKCA1LjAlKVwgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzXC4gSWxsaW5vaXNcICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMzggKCA0LjMlKVwgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA0XC4gSW5kaWFuYVwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMzYgKCA0LjElKVwgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA1XC4gTm9ydGggQ2Fyb2xpbmFcICAgICAgICAgICAgICAgICAgICAgIHwgMzUgKCA0LjAlKVwgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA2XC4gUGVubnN5bHZhbmlhXCAgICAgICAgICAgICAgICAgICAgICAgIHwgMzIgKCAzLjclKVwgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA3XC4gTWljaGlnYW5cICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMzAgKCAzLjQlKVwgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA4XC4gRmxvcmlkYVwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMjkgKCAzLjMlKVwgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA5XC4gR2VvcmdpYVwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMjggKCAzLjIlKVwgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMFwuIFRleGFzXCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMjcgKCAzLjElKVwgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbIDM5IG90aGVycyBdICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNDkyICg1Ni4yJSkgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCA3ICB8IGNvdW50eVwgICAgICAgICAgICAgICAgICAgICAgfCAxXC4gSmVmZmVyc29uXCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTggKCAyLjElKVwgICAgICAgICB8ICFbXSh0bXAvZHMwMTA3LnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtjaGFyYWN0ZXJdICAgICAgICAgICAgICAgICAgfCAyXC4gQ29va1wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTIgKCAxLjQlKVwgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzXC4gSGFtaWx0b25cICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTEgKCAxLjMlKVwgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA0XC4gTGFrZVwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTEgKCAxLjMlKVwgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA1XC4gTG9zIEFuZ2VsZXNcICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTAgKCAxLjElKVwgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA2XC4gV2F5bmVcICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTAgKCAxLjElKVwgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA3XC4gV2FzaGluZ3RvblwgICAgICAgICAgICAgICAgICAgICAgICAgIHwgOSAoIDEuMCUpXCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA4XC4gQ3V5YWhvZ2FcICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNyAoIDAuOCUpXCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA5XC4gSmFja3NvblwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNyAoIDAuOCUpXCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMFwuIE1hZGlzb25cICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNyAoIDAuOCUpXCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbIDQ2MSBvdGhlcnMgXSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNzc0ICg4OC40JSkgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCA4ICB8IGNpdHlcICAgICAgICAgICAgICAgICAgICAgICAgfCAxXC4gTm90IGluIGEgY2l0eVwgICAgICAgICAgICAgICAgICAgICAgIHwgMTAzICgxMS44JSlcICAgICAgICB8ICFbXSh0bXAvZHMwMTA4LnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtjaGFyYWN0ZXJdICAgICAgICAgICAgICAgICAgfCAyXC4gTmV3IFlvcmtcICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgOSAoIDEuMCUpXCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzXC4gQ2xldmVsYW5kXCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNiAoIDAuNyUpXCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA0XC4gQmFsdGltb3JlXCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNSAoIDAuNiUpXCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA1XC4gQ2hpY2Fnb1wgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNSAoIDAuNiUpXCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA2XC4gRGV0cm9pdFwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNSAoIDAuNiUpXCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA3XC4gTWlsd2F1a2VlXCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNSAoIDAuNiUpXCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA4XC4gTmV3IEhhdmVuXCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNSAoIDAuNiUpXCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA5XC4gUGhpbGFkZWxwaGlhXCAgICAgICAgICAgICAgICAgICAgICAgIHwgNSAoIDAuNiUpXCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMFwuIFNwcmluZ2ZpZWxkXCAgICAgICAgICAgICAgICAgICAgICAgIHwgNSAoIDAuNiUpXCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbIDU5NyBvdGhlcnMgXSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNzIzICg4Mi41JSkgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCA5ICB8IENNQVFcICAgICAgICAgICAgICAgICAgICAgfCBNZWFuIChzZCkgOiA4LjQgKDMpXCAgICAgICAgICAgICAgICAgICAgIHwgNjAxIGRpc3RpbmN0IHZhbHVlcyB8ICFbXSh0bXAvZHMwMTA5LnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtudW1lcmljXSAgICAgICAgICAgICAgICAgICAgfCBtaW4gPCBtZWQgPCBtYXg6XCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxLjYgPCA4LjYgPCAyMy4xXCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJUVIgKENWKSA6IDMuNyAoMC40KSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCAxMCB8IHpjdGFcICAgICAgICAgICAgICAgICAgICAgICAgfCAxXC4gMTAyMlwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMSAoIDAuMSUpXCAgICAgICAgICB8ICFbXSh0bXAvZHMwMTEwLnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtmYWN0b3JdICAgICAgICAgICAgICAgICAgICAgfCAyXC4gMTEwM1wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMiAoIDAuMiUpXCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzXC4gMTIwMVwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMSAoIDAuMSUpXCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA0XC4gMTYwOFwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMiAoIDAuMiUpXCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA1XC4gMTgzMlwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMSAoIDAuMSUpXCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA2XC4gMTg0MFwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMSAoIDAuMSUpXCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA3XC4gMTg2M1wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMSAoIDAuMSUpXCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA4XC4gMTkwNFwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMSAoIDAuMSUpXCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA5XC4gMjExM1wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMSAoIDAuMSUpXCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMFwuIDIxMTlcICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMSAoIDAuMSUpXCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbIDgzMiBvdGhlcnMgXSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgODY0ICg5OC42JSkgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCAxMSB8IHpjdGFfYXJlYVwgICAgICAgICAgICAgICAgICAgfCBNZWFuIChzZCkgOiAxODMxNzM0ODEuOSAoNTQyNTk4ODc4LjUpXCAgIHwgODQyIGRpc3RpbmN0IHZhbHVlcyB8ICFbXSh0bXAvZHMwMTExLnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtudW1lcmljXSAgICAgICAgICAgICAgICAgICAgfCBtaW4gPCBtZWQgPCBtYXg6XCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxNTQ1OSA8IDM3NjUzNTYwLjUgPCA4MTY0ODIwNjI1XCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJUVIgKENWKSA6IDE0NTgzNjkwNi41ICgzKSAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCAxMiB8IHpjdGFfcG9wXCAgICAgICAgICAgICAgICAgICAgfCBNZWFuIChzZCkgOiAyNDIyNy42ICgxNzc3Mi4yKVwgICAgICAgICAgIHwgODM3IGRpc3RpbmN0IHZhbHVlcyB8ICFbXSh0bXAvZHMwMTEyLnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtudW1lcmljXSAgICAgICAgICAgICAgICAgICAgfCBtaW4gPCBtZWQgPCBtYXg6XCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAwIDwgMjIwMTQgPCA5NTM5N1wgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJUVIgKENWKSA6IDI1MjA3LjggKDAuNykgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCAxMyB8IGltcF9hNTAwXCAgICAgICAgICAgICAgICAgICAgfCBNZWFuIChzZCkgOiAyNC43ICgxOS4zKVwgICAgICAgICAgICAgICAgIHwgODE2IGRpc3RpbmN0IHZhbHVlcyB8ICFbXSh0bXAvZHMwMTEzLnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtudW1lcmljXSAgICAgICAgICAgICAgICAgICAgfCBtaW4gPCBtZWQgPCBtYXg6XCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAwIDwgMjUuMSA8IDY5LjZcICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJUVIgKENWKSA6IDM2LjUgKDAuOCkgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCAxNCB8IGltcF9hMTAwMFwgICAgICAgICAgICAgICAgICAgfCBNZWFuIChzZCkgOiAyNC4zICgxOClcICAgICAgICAgICAgICAgICAgIHwgODYwIGRpc3RpbmN0IHZhbHVlcyB8ICFbXSh0bXAvZHMwMTE0LnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtudW1lcmljXSAgICAgICAgICAgICAgICAgICAgfCBtaW4gPCBtZWQgPCBtYXg6XCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAwIDwgMjQuNSA8IDY3LjVcICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJUVIgKENWKSA6IDMzLjMgKDAuNykgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCAxNSB8IGltcF9hNTAwMFwgICAgICAgICAgICAgICAgICAgfCBNZWFuIChzZCkgOiAxOS45ICgxNC43KVwgICAgICAgICAgICAgICAgIHwgODcwIGRpc3RpbmN0IHZhbHVlcyB8ICFbXSh0bXAvZHMwMTE1LnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtudW1lcmljXSAgICAgICAgICAgICAgICAgICAgfCBtaW4gPCBtZWQgPCBtYXg6XCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAwLjEgPCAxOS4xIDwgNzQuNlwgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJUVIgKENWKSA6IDIzLjMgKDAuNykgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCAxNiB8IGltcF9hMTAwMDBcICAgICAgICAgICAgICAgICAgfCBNZWFuIChzZCkgOiAxNS44ICgxMy44KVwgICAgICAgICAgICAgICAgIHwgODcwIGRpc3RpbmN0IHZhbHVlcyB8ICFbXSh0bXAvZHMwMTE2LnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtudW1lcmljXSAgICAgICAgICAgICAgICAgICAgfCBtaW4gPCBtZWQgPCBtYXg6XCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAwLjEgPCAxMi40IDwgNzIuMVwgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJUVIgKENWKSA6IDE5LjYgKDAuOSkgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCAxNyB8IGltcF9hMTUwMDBcICAgICAgICAgICAgICAgICAgfCBNZWFuIChzZCkgOiAxMy40ICgxMy4xKVwgICAgICAgICAgICAgICAgIHwgODcwIGRpc3RpbmN0IHZhbHVlcyB8ICFbXSh0bXAvZHMwMTE3LnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtudW1lcmljXSAgICAgICAgICAgICAgICAgICAgfCBtaW4gPCBtZWQgPCBtYXg6XCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAwLjEgPCA5LjcgPCA3MS4xXCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJUVIgKENWKSA6IDE3LjMgKDEpICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCAxOCB8IGNvdW50eV9hcmVhXCAgICAgICAgICAgICAgICAgfCBNZWFuIChzZCkgOiAzNzY4NzAxOTkyLjEgKDYyMTI4Mjk1NTMuNilcIHwgNTY0IGRpc3RpbmN0IHZhbHVlcyB8ICFbXSh0bXAvZHMwMTE4LnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtudW1lcmljXSAgICAgICAgICAgICAgICAgICAgfCBtaW4gPCBtZWQgPCBtYXg6XCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzMzcwMzUxMiA8IDE2OTA4MjY1NjYuNSA8IDUxOTQ3MjI5NTA5XCAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJUVIgKENWKSA6IDE3NjE2NTU5MTEuNSAoMS42KSAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCAxOSB8IGNvdW50eV9wb3BcICAgICAgICAgICAgICAgICAgfCBNZWFuIChzZCkgOiA2ODcyOTguNCAoMTI5MzQ4OC43KVwgICAgICAgIHwgNTY0IGRpc3RpbmN0IHZhbHVlcyB8ICFbXSh0bXAvZHMwMTE5LnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtudW1lcmljXSAgICAgICAgICAgICAgICAgICAgfCBtaW4gPCBtZWQgPCBtYXg6XCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA3ODMgPCAyODA3MzAuNSA8IDk4MTg2MDVcICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJUVIgKENWKSA6IDY0MjIxMSAoMS45KSAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCAyMCB8IGxvZ19kaXN0X3RvX3ByaXNlY1wgICAgICAgICAgfCBNZWFuIChzZCkgOiA2LjIgKDEuNClcICAgICAgICAgICAgICAgICAgIHwgODcwIGRpc3RpbmN0IHZhbHVlcyB8ICFbXSh0bXAvZHMwMTIwLnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtudW1lcmljXSAgICAgICAgICAgICAgICAgICAgfCBtaW4gPCBtZWQgPCBtYXg6XCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAtMS41IDwgNi40IDwgMTAuNVwgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJUVIgKENWKSA6IDEuNyAoMC4yKSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCAyMSB8IGxvZ19wcmlfbGVuZ3RoXzUwMDBcICAgICAgICAgfCBNZWFuIChzZCkgOiA5LjggKDEuMSlcICAgICAgICAgICAgICAgICAgIHwgNTg2IGRpc3RpbmN0IHZhbHVlcyB8ICFbXSh0bXAvZHMwMTIxLnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtudW1lcmljXSAgICAgICAgICAgICAgICAgICAgfCBtaW4gPCBtZWQgPCBtYXg6XCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA4LjUgPCAxMC4xIDwgMTJcICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJUVIgKENWKSA6IDIuMiAoMC4xKSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCAyMiB8IGxvZ19wcmlfbGVuZ3RoXzEwMDAwXCAgICAgICAgfCBNZWFuIChzZCkgOiAxMC45ICgxLjEpXCAgICAgICAgICAgICAgICAgIHwgNjg3IGRpc3RpbmN0IHZhbHVlcyB8ICFbXSh0bXAvZHMwMTIyLnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtudW1lcmljXSAgICAgICAgICAgICAgICAgICAgfCBtaW4gPCBtZWQgPCBtYXg6XCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA5LjIgPCAxMS4yIDwgMTNcICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJUVIgKENWKSA6IDIgKDAuMSkgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCAyMyB8IGxvZ19wcmlfbGVuZ3RoXzE1MDAwXCAgICAgICAgfCBNZWFuIChzZCkgOiAxMS41ICgxLjEpXCAgICAgICAgICAgICAgICAgIHwgNzI2IGRpc3RpbmN0IHZhbHVlcyB8ICFbXSh0bXAvZHMwMTIzLnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtudW1lcmljXSAgICAgICAgICAgICAgICAgICAgfCBtaW4gPCBtZWQgPCBtYXg6XCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA5LjYgPCAxMS43IDwgMTMuNlwgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJUVIgKENWKSA6IDEuNSAoMC4xKSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCAyNCB8IGxvZ19wcmlfbGVuZ3RoXzI1MDAwXCAgICAgICAgfCBNZWFuIChzZCkgOiAxMi4yICgxLjEpXCAgICAgICAgICAgICAgICAgIHwgNzg3IGRpc3RpbmN0IHZhbHVlcyB8ICFbXSh0bXAvZHMwMTI0LnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtudW1lcmljXSAgICAgICAgICAgICAgICAgICAgfCBtaW4gPCBtZWQgPCBtYXg6XCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMC4xIDwgMTIuNSA8IDE0LjRcICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJUVIgKENWKSA6IDEuNCAoMC4xKSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCAyNSB8IGxvZ19wcmlzZWNfbGVuZ3RoXzUwMFwgICAgICAgfCBNZWFuIChzZCkgOiA3ICgxKVwgICAgICAgICAgICAgICAgICAgICAgIHwgMzgyIGRpc3RpbmN0IHZhbHVlcyB8ICFbXSh0bXAvZHMwMTI1LnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtudW1lcmljXSAgICAgICAgICAgICAgICAgICAgfCBtaW4gPCBtZWQgPCBtYXg6XCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA2LjIgPCA2LjIgPCA5LjRcICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJUVIgKENWKSA6IDEuNiAoMC4xKSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCAyNiB8IGxvZ19wcmlzZWNfbGVuZ3RoXzEwMDBcICAgICAgfCBNZWFuIChzZCkgOiA4LjYgKDAuOClcICAgICAgICAgICAgICAgICAgIHwgNTkxIGRpc3RpbmN0IHZhbHVlcyB8ICFbXSh0bXAvZHMwMTI2LnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtudW1lcmljXSAgICAgICAgICAgICAgICAgICAgfCBtaW4gPCBtZWQgPCBtYXg6XCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA3LjYgPCA4LjcgPCAxMC41XCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJUVIgKENWKSA6IDEuNiAoMC4xKSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCAyNyB8IGxvZ19wcmlzZWNfbGVuZ3RoXzUwMDBcICAgICAgfCBNZWFuIChzZCkgOiAxMS4zICgwLjgpXCAgICAgICAgICAgICAgICAgIHwgODUyIGRpc3RpbmN0IHZhbHVlcyB8ICFbXSh0bXAvZHMwMTI3LnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtudW1lcmljXSAgICAgICAgICAgICAgICAgICAgfCBtaW4gPCBtZWQgPCBtYXg6XCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA4LjUgPCAxMS40IDwgMTIuOFwgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJUVIgKENWKSA6IDAuOSAoMC4xKSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCAyOCB8IGxvZ19wcmlzZWNfbGVuZ3RoXzEwMDAwXCAgICAgfCBNZWFuIChzZCkgOiAxMi40ICgwLjcpXCAgICAgICAgICAgICAgICAgIHwgODY3IGRpc3RpbmN0IHZhbHVlcyB8ICFbXSh0bXAvZHMwMTI4LnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtudW1lcmljXSAgICAgICAgICAgICAgICAgICAgfCBtaW4gPCBtZWQgPCBtYXg6XCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA5LjIgPCAxMi41IDwgMTMuOFwgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJUVIgKENWKSA6IDEgKDAuMSkgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCAyOSB8IGxvZ19wcmlzZWNfbGVuZ3RoXzE1MDAwXCAgICAgfCBNZWFuIChzZCkgOiAxMyAoMC43KVwgICAgICAgICAgICAgICAgICAgIHwgODY5IGRpc3RpbmN0IHZhbHVlcyB8ICFbXSh0bXAvZHMwMTI5LnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtudW1lcmljXSAgICAgICAgICAgICAgICAgICAgfCBtaW4gPCBtZWQgPCBtYXg6XCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA5LjYgPCAxMy4xIDwgMTQuNFwgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJUVIgKENWKSA6IDEgKDAuMSkgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCAzMCB8IGxvZ19wcmlzZWNfbGVuZ3RoXzI1MDAwXCAgICAgfCBNZWFuIChzZCkgOiAxMy44ICgwLjcpXCAgICAgICAgICAgICAgICAgIHwgODcwIGRpc3RpbmN0IHZhbHVlcyB8ICFbXSh0bXAvZHMwMTMwLnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtudW1lcmljXSAgICAgICAgICAgICAgICAgICAgfCBtaW4gPCBtZWQgPCBtYXg6XCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMC4xIDwgMTMuOSA8IDE1LjJcICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJUVIgKENWKSA6IDEgKDAuMSkgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCAzMSB8IGxvZ19uZWlfMjAwOF9wbTI1X3N1bV8xMDAwMFwgfCBNZWFuIChzZCkgOiA0ICgyLjQpXCAgICAgICAgICAgICAgICAgICAgIHwgODI4IGRpc3RpbmN0IHZhbHVlcyB8ICFbXSh0bXAvZHMwMTMxLnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtudW1lcmljXSAgICAgICAgICAgICAgICAgICAgfCBtaW4gPCBtZWQgPCBtYXg6XCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAwIDwgNC4zIDwgOS4xXCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJUVIgKENWKSA6IDMuNSAoMC42KSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCAzMiB8IGxvZ19uZWlfMjAwOF9wbTI1X3N1bV8xNTAwMFwgfCBNZWFuIChzZCkgOiA0LjcgKDIuMilcICAgICAgICAgICAgICAgICAgIHwgODU1IGRpc3RpbmN0IHZhbHVlcyB8ICFbXSh0bXAvZHMwMTMyLnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtudW1lcmljXSAgICAgICAgICAgICAgICAgICAgfCBtaW4gPCBtZWQgPCBtYXg6XCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAwIDwgNSA8IDkuNFwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJUVIgKENWKSA6IDIuOSAoMC41KSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCAzMyB8IGxvZ19uZWlfMjAwOF9wbTI1X3N1bV8yNTAwMFwgfCBNZWFuIChzZCkgOiA1LjcgKDIuMSlcICAgICAgICAgICAgICAgICAgIHwgODYwIGRpc3RpbmN0IHZhbHVlcyB8ICFbXSh0bXAvZHMwMTMzLnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtudW1lcmljXSAgICAgICAgICAgICAgICAgICAgfCBtaW4gPCBtZWQgPCBtYXg6XCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAwIDwgNS45IDwgOS43XCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJUVIgKENWKSA6IDIuNiAoMC40KSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCAzNCB8IGxvZ19uZWlfMjAwOF9wbTEwX3N1bV8xMDAwMFwgfCBNZWFuIChzZCkgOiA0LjMgKDIuMylcICAgICAgICAgICAgICAgICAgIHwgODI5IGRpc3RpbmN0IHZhbHVlcyB8ICFbXSh0bXAvZHMwMTM0LnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtudW1lcmljXSAgICAgICAgICAgICAgICAgICAgfCBtaW4gPCBtZWQgPCBtYXg6XCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAwIDwgNC42IDwgOS4zXCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJUVIgKENWKSA6IDMuNCAoMC41KSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCAzNSB8IGxvZ19uZWlfMjAwOF9wbTEwX3N1bV8xNTAwMFwgfCBNZWFuIChzZCkgOiA1LjEgKDIuMilcICAgICAgICAgICAgICAgICAgIHwgODU1IGRpc3RpbmN0IHZhbHVlcyB8ICFbXSh0bXAvZHMwMTM1LnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtudW1lcmljXSAgICAgICAgICAgICAgICAgICAgfCBtaW4gPCBtZWQgPCBtYXg6XCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAwIDwgNS40IDwgOS43XCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJUVIgKENWKSA6IDIuOCAoMC40KSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCAzNiB8IGxvZ19uZWlfMjAwOF9wbTEwX3N1bV8yNTAwMFwgfCBNZWFuIChzZCkgOiA2LjEgKDIpXCAgICAgICAgICAgICAgICAgICAgIHwgODYwIGRpc3RpbmN0IHZhbHVlcyB8ICFbXSh0bXAvZHMwMTM2LnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtudW1lcmljXSAgICAgICAgICAgICAgICAgICAgfCBtaW4gPCBtZWQgPCBtYXg6XCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAwIDwgNi40IDwgOS45XCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJUVIgKENWKSA6IDIuNCAoMC4zKSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCAzNyB8IHBvcGRlbnNfY291bnR5XCAgICAgICAgICAgICAgfCBNZWFuIChzZCkgOiA1NTEuOCAoMTcxMS41KVwgICAgICAgICAgICAgIHwgNTY0IGRpc3RpbmN0IHZhbHVlcyB8ICFbXSh0bXAvZHMwMTM3LnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtudW1lcmljXSAgICAgICAgICAgICAgICAgICAgfCBtaW4gPCBtZWQgPCBtYXg6XCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAwLjMgPCAxNTYuNyA8IDI2ODIxLjlcICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJUVIgKENWKSA6IDQ3MCAoMy4xKSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCAzOCB8IHBvcGRlbnNfemN0YVwgICAgICAgICAgICAgICAgfCBNZWFuIChzZCkgOiAxMjc5LjcgKDI3NTcuNSlcICAgICAgICAgICAgIHwgODQwIGRpc3RpbmN0IHZhbHVlcyB8ICFbXSh0bXAvZHMwMTM4LnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtudW1lcmljXSAgICAgICAgICAgICAgICAgICAgfCBtaW4gPCBtZWQgPCBtYXg6XCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAwIDwgNjEwLjMgPCAzMDQxOC44XCAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJUVIgKENWKSA6IDEyODEuNCAoMi4yKSAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCAzOSB8IG5vaHNcICAgICAgICAgICAgICAgICAgICAgICAgfCBNZWFuIChzZCkgOiA3ICg3LjIpXCAgICAgICAgICAgICAgICAgICAgIHwgMjE1IGRpc3RpbmN0IHZhbHVlcyB8ICFbXSh0bXAvZHMwMTM5LnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtudW1lcmljXSAgICAgICAgICAgICAgICAgICAgfCBtaW4gPCBtZWQgPCBtYXg6XCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAwIDwgNS4xIDwgMTAwXCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJUVIgKENWKSA6IDYuMSAoMSkgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCA0MCB8IHNvbWVoc1wgICAgICAgICAgICAgICAgICAgICAgfCBNZWFuIChzZCkgOiAxMC4yICg2LjIpXCAgICAgICAgICAgICAgICAgIHwgMjMwIGRpc3RpbmN0IHZhbHVlcyB8ICFbXSh0bXAvZHMwMTQwLnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtudW1lcmljXSAgICAgICAgICAgICAgICAgICAgfCBtaW4gPCBtZWQgPCBtYXg6XCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAwIDwgOS40IDwgNzIuMlwgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJUVIgKENWKSA6IDggKDAuNikgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCA0MSB8IGhzXCAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNZWFuIChzZCkgOiAzMC4zICgxMS40KVwgICAgICAgICAgICAgICAgIHwgMzQ3IGRpc3RpbmN0IHZhbHVlcyB8ICFbXSh0bXAvZHMwMTQxLnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtudW1lcmljXSAgICAgICAgICAgICAgICAgICAgfCBtaW4gPCBtZWQgPCBtYXg6XCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAwIDwgMzAuOCA8IDEwMFwgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJUVIgKENWKSA6IDEyLjMgKDAuNCkgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCA0MiB8IHNvbWVjb2xsZWdlXCAgICAgICAgICAgICAgICAgfCBNZWFuIChzZCkgOiAyMS42ICg4LjYpXCAgICAgICAgICAgICAgICAgIHwgMjQwIGRpc3RpbmN0IHZhbHVlcyB8ICFbXSh0bXAvZHMwMTQyLnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtudW1lcmljXSAgICAgICAgICAgICAgICAgICAgfCBtaW4gPCBtZWQgPCBtYXg6XCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAwIDwgMjEuMyA8IDEwMFwgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJUVIgKENWKSA6IDcuMiAoMC40KSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCA0MyB8IGFzc29jaWF0ZVwgICAgICAgICAgICAgICAgICAgfCBNZWFuIChzZCkgOiA3LjEgKDQpXCAgICAgICAgICAgICAgICAgICAgIHwgMTU3IGRpc3RpbmN0IHZhbHVlcyB8ICFbXSh0bXAvZHMwMTQzLnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtudW1lcmljXSAgICAgICAgICAgICAgICAgICAgfCBtaW4gPCBtZWQgPCBtYXg6XCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAwIDwgNy4xIDwgNzEuNFwgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJUVIgKENWKSA6IDMuOSAoMC42KSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCA0NCB8IGJhY2hlbG9yXCAgICAgICAgICAgICAgICAgICAgfCBNZWFuIChzZCkgOiAxNC45ICg5LjcpXCAgICAgICAgICAgICAgICAgIHwgMzAxIGRpc3RpbmN0IHZhbHVlcyB8ICFbXSh0bXAvZHMwMTQ0LnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtudW1lcmljXSAgICAgICAgICAgICAgICAgICAgfCBtaW4gPCBtZWQgPCBtYXg6XCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAwIDwgMTIuOSA8IDEwMFwgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJUVIgKENWKSA6IDEwLjQgKDAuNykgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCA0NSB8IGdyYWRcICAgICAgICAgICAgICAgICAgICAgICAgfCBNZWFuIChzZCkgOiA4LjkgKDguNilcICAgICAgICAgICAgICAgICAgIHwgMjQ1IGRpc3RpbmN0IHZhbHVlcyB8ICFbXSh0bXAvZHMwMTQ1LnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtudW1lcmljXSAgICAgICAgICAgICAgICAgICAgfCBtaW4gPCBtZWQgPCBtYXg6XCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAwIDwgNi43IDwgMTAwXCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJUVIgKENWKSA6IDcuMSAoMSkgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCA0NiB8IHBvdlwgICAgICAgICAgICAgICAgICAgICAgICAgfCBNZWFuIChzZCkgOiAxNSAoMTEuMylcICAgICAgICAgICAgICAgICAgIHwgMzQ1IGRpc3RpbmN0IHZhbHVlcyB8ICFbXSh0bXAvZHMwMTQ2LnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtudW1lcmljXSAgICAgICAgICAgICAgICAgICAgfCBtaW4gPCBtZWQgPCBtYXg6XCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAwIDwgMTIuMSA8IDY1LjlcICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJUVIgKENWKSA6IDE0LjcgKDAuOCkgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCA0NyB8IGhzX29ybGVzc1wgICAgICAgICAgICAgICAgICAgfCBNZWFuIChzZCkgOiA0Ny41ICgxNi44KVwgICAgICAgICAgICAgICAgIHwgNDY0IGRpc3RpbmN0IHZhbHVlcyB8ICFbXSh0bXAvZHMwMTQ3LnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtudW1lcmljXSAgICAgICAgICAgICAgICAgICAgfCBtaW4gPCBtZWQgPCBtYXg6XCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAwIDwgNDguNyA8IDEwMFwgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJUVIgKENWKSA6IDIxLjIgKDAuNCkgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCA0OCB8IHVyYzIwMTNcICAgICAgICAgICAgICAgICAgICAgfCBNZWFuIChzZCkgOiAyLjkgKDEuNSlcICAgICAgICAgICAgICAgICAgIHwgMSA6IDIwMyAoMjMuMiUpXCAgICB8ICFbXSh0bXAvZHMwMTQ4LnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtudW1lcmljXSAgICAgICAgICAgICAgICAgICAgfCBtaW4gPCBtZWQgPCBtYXg6XCAgICAgICAgICAgICAgICAgICAgICAgIHwgMiA6IDE2MyAoMTguNiUpXCAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxIDwgMyA8IDZcICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyA6IDIyOCAoMjYuMCUpXCAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJUVIgKENWKSA6IDIgKDAuNSkgICAgICAgICAgICAgICAgICAgICAgIHwgNCA6IDEyMyAoMTQuMCUpXCAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNSA6IDEwMSAoMTEuNSUpXCAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNiA6ICA1OCAoIDYuNiUpICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCA0OSB8IHVyYzIwMDZcICAgICAgICAgICAgICAgICAgICAgfCBNZWFuIChzZCkgOiAzICgxLjUpXCAgICAgICAgICAgICAgICAgICAgIHwgMSA6IDE5NSAoMjIuMyUpXCAgICB8ICFbXSh0bXAvZHMwMTQ5LnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtudW1lcmljXSAgICAgICAgICAgICAgICAgICAgfCBtaW4gPCBtZWQgPCBtYXg6XCAgICAgICAgICAgICAgICAgICAgICAgIHwgMiA6IDE2MiAoMTguNSUpXCAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxIDwgMyA8IDZcICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyA6IDIyMSAoMjUuMiUpXCAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJUVIgKENWKSA6IDIgKDAuNSkgICAgICAgICAgICAgICAgICAgICAgIHwgNCA6IDEyNyAoMTQuNSUpXCAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNSA6IDExNSAoMTMuMSUpXCAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNiA6ICA1NiAoIDYuNCUpICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKfCA1MCB8IGFvZFwgICAgICAgICAgICAgICAgICAgICAgICAgfCBNZWFuIChzZCkgOiA0My43ICgxOS42KVwgICAgICAgICAgICAgICAgIHwgNTgxIGRpc3RpbmN0IHZhbHVlcyB8ICFbXSh0bXAvZHMwMTUwLnBuZykgfCA4NzZcICAgfCAwXCAgICAgIHwKfCAgICB8IFtudW1lcmljXSAgICAgICAgICAgICAgICAgICAgfCBtaW4gPCBtZWQgPCBtYXg6XCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAoMTAwJSkgfCAoMCUpICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA1IDwgNDAuMiA8IDE0M1wgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKfCAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJUVIgKENWKSA6IDE4ICgwLjQpICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwKKy0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLSsKCgpXZSBjYW4gc2VlIHRoYXQgZm9yIG1hbnkgdmFyaWFibGVzIHRoZXJlIGFyZSBtYW55IGxvdyB2YWx1ZXMgYXMgdGhlIGRpc3RyaWJ1dGlvbiBzaG93cyB0d28gcGVha3MsIG9uZSBuZWFyIHplcm8gYW5kIGFub3RoZXIgd2l0aCBhIGhpZ2hlciB2YWx1ZS4gVGhpcyBpcyB0cnVlIGZvciB0aGUgaW1wIHZhcmlhYmxlcyAobWVhc3VyZXMgb2YgZGV2ZWxvcG1lbnQpLCB0aGUgbmVpIHZhcmlhYmxlcyAobWVhc3VyZXMgb2YgZW1pc3Npb24gc291cmNlcykgYW5kIHRoZSByb2FkIGRlbnNpdHkgdmFyaWFibGVzLiBXZSBjYW4gYWxzbyBzZWUgdGhhdCB0aGUgcmFuZ2Ugb2Ygc29tZSBvZiB0aGUgdmFyaWFibGVzIGlzIHZlcnkgbGFyZ2UsIGluIHBhcnRpY3VsYXIgdGhlIGFyZWEgYW5kIHBvcHVsYXRpb24gcmVsYXRlZCB2YXJpYWJsZXMuCgoKSW4gcHJlZGljdGlvbiBhbmFseXNlcywgaXQgaXMgYWxzbyB1c2VmdWwgdG8gZXZhbHVhdGUgaWYgYW55IG9mIHRoZSB2YXJpYWJsZXMgYXJlIGNvcnJlbGF0ZWQuCgpJbnR1aXRpdmVseSB3ZSBjYW4gZXhwZWN0IHNvbWUgb2Ygb3VyIHZhcmlhYmxlcyB0byBiZSBjb3JyZWxhdGVkLgoKV2UgZXhwZWN0IHRoZSBkZXZlbG9wbWVudCB2YXJpYWJsZXMgKGltcCkgdG8gYmUgY29ycmVsYXRlZCB3aXRoIGVhY2ggb3RoZXIsIHdlIGV4cGVjdCB0aGUgcm9hZCBkZW5zaXR5IHZhcmlhYmxlcyB0byBiZSBjb3JyZWxhdGVkIHdpdGggZWFjaCBvdGhlciwgd2UgZXhwZWN0IHRoZSBlbWlzc2lvbiB2YXJpYWJsZXMgdG8gYmUgY29ycmVsYXRlZCB3aXRoIGVhY2ggb3RoZXIsIGFuZCB3ZSBhbHNvIGV4cGVjdCB0aGVzZSB2YXJpYWJsZXMgdG8gYmUgY29ycmVsYXRlZCB3aXRoIG9uZSBhbm90aGVyIGFuZCBsaWtlbHkgY29ycmVsYXRlZCB3aXRoIHBvcHVsYXRpb24gZGVuc2l0eS4gV2UgY2FuIGdldCBhIG5pY2UgdmlzdWFsaXphdGlvbiBvZiBjb3JyZWxhdGlvbiB1c2luZyB0aGUgYGdnY29ycigpYCBmdW5jdGlvbiBhbmQgdGhlIGBnZ3BhaXJzKClgIGZ1bmN0aW9uIG9mIHRoZSBgR0dhbGx5YCBwYWNrYWdlLiB0byBzZWxlY3Qgb3VyIHZhcmlhYmxlcyBvZiBpbnRlcmVzdCB3ZSBjYW4gdXNlIHRoZSBgc2VsZWN0KClgIGZ1bmN0aW9uIHdpdGggdGhlIGBjb250YWlucygpYCBmdW5jdGlvbiBvZiB0aGUgYHRpZHlyYCBwYWNrYWdlLiAKCkZpcnN0IGxldCdzIGxvb2sgYXQgdGhlIGltcC9kZXZlbG9wbWVudCB2YXJpYWJsZXMuIApgYGB7ciwgb3V0LndpZHRoID0gIjQwMHB4In0Kc2VsZWN0KHBtLCBjb250YWlucygiaW1wIikpICU+JQogIGdnY29ycihwYWxldHRlID0gIlJkQnUiLCBsYWJlbCA9IFRSVUUpCgpzZWxlY3QocG0sIGNvbnRhaW5zKCJpbXAiKSkgJT4lCiAgZ2dwYWlycygpCiAgCmBgYAoKSW5kZWVkLCB3ZSBjYW4gc2VlIHRoYXQgaW1wX2ExMDAwIGFuZCBpbXBfYTUwMCBhcmUgcGVyZmVjdGx5IGNvcnJlbGF0ZWQsIGFzIHdlbGwgYXMgaW1wX2ExMDAwMCwgaW1wX2ExNTAwMC4KCgpOb3cgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhlIHJvYWQgZGVuc2l0eSBkYXRhOgoKYGBge3IsIGZpZy53ZWlnaHQ9MTJ9CnNlbGVjdChwbSwgY29udGFpbnMoInByaSIpKSAlPiUKICBnZ2NvcnIocGFsZXR0ZSA9ICJSZEJ1IiwgIGhqdXN0ID0gLjg1LCBzaXplID0gMywKICAgICAgIGxheW91dC5leHA9MiwgbGFiZWwgPSBUUlVFKQoKc2VsZWN0KHBtLCBjb250YWlucygicHJpIikpICU+JQogIGdncGFpcnMoKQpgYGAKCldlIGNhbiBzZWUgdGhhdCB3aGlsZSBzb21lIG9mIHRoZSByb2FkIGRlbnNpdHkgdmFyaWFibGVzIGFyZSBoaWdobHkgY29ycmVsYXRlZCB3aXRoIG9uZSBhbm90aGVyIChvciBhbnRpLWNvcnJlbGF0ZWQpLCB0aGVyZSBhcnIgc29tZSB2YXJpYWJsZXMgdGhhdCBhcmUgbGVzcyBjb3JyZWxhdGVkIHdpdGggb25lIGFub3RoZXIuCgpGaW5hbGx5IGxldCdzIGxvb2sgYXQgdGhlIGVtaXNzaW9uIHZhcmlhYmxlcy4KCmBgYHtyfQpzZWxlY3QocG0sIGNvbnRhaW5zKCJuZWkiKSkgJT4lCiAgZ2djb3JyKHBhbGV0dGUgPSAiUmRCdSIsICBoanVzdCA9IC44NSwgc2l6ZSA9IDMsCiAgICAgICBsYXlvdXQuZXhwPTIsIGxhYmVsID0gVFJVRSkKCnNlbGVjdChwbSwgY29udGFpbnMoIm5laSIpKSAlPiUKICBnZ3BhaXJzKCkKYGBgCgpXZSB3b3VsZCBhbHNvIGV4cGVjdCB0aGUgcG9wdWxhdGlvbiBkZW5zaXR5IGRhdGEgbWlnaHQgY29ycmVsYXRlIHdpdGggc29tZSBvZiB0aGVzZSB2YXJpYWJsZXMuIExldCdzIHRha2UgYSBsb29rLgoKYGBge3J9CnBtICU+JQpzZWxlY3QobG9nX25laV8yMDA4X3BtMjVfc3VtXzEwMDAwLCBwb3BkZW5zX2NvdW50eSwgbG9nX3ByaV9sZW5ndGhfMTAwMDAsIGltcF9hMTAwMDApICU+JQogIGdnY29ycihwYWxldHRlID0gIlJkQnUiLCAgaGp1c3QgPSAuODUsIHNpemUgPSAzLAogICAgICAgbGF5b3V0LmV4cD0yLCBsYWJlbCA9IFRSVUUpCgpwbSAlPiUKc2VsZWN0KGxvZ19uZWlfMjAwOF9wbTI1X3N1bV8xMDAwMCwgcG9wZGVuc19jb3VudHksIGxvZ19wcmlfbGVuZ3RoXzEwMDAwLCBpbXBfYTEwMDAwKSAlPiUKICBnZ3BhaXJzKCkKYGBgCgoKSW50ZXJlc3RpbmcsIHNvIHRoZXNlIHZhcmlhYmxlcyBkb24ndCBhcHBlYXIgdG8gYmUgaGlnaGx5IGNvcnJlbGF0ZWQsIHRoZXJlZm9yZSB3ZSBtaWdodCBuZWVkIHZhcmlhYmxlcyBmcm9tIGVhY2ggb2YgdGhlIGNhdGVnb3JpZXMgdG8gcHJlZGljdCBvdXIgbW9uaXRvciBQTX4yLjV+IHBvbGx1dGlvbiB2YWx1ZXMuCgpXZSBzZWVtIHRvIGhhdmUgc29tZSBwcmV0dHkgZXh0cmVtZSBwb3B1bGF0aW9uIHZhbHVlcyB0aG91Z2gsIHNvIGxldCdzIHNlZSB3aGF0IGhhcHBlbnMgd2hlbiB3ZSB0YWtlIHRoZSBsb2cgdmFsdWUuCgpgYGB7cn0KcG0gJT4lCiAgbXV0YXRlKGxvZ19wb3BkZW5zX2NvdW50eT0gbG9nKHBvcGRlbnNfY291bnR5KSkgJT4lCnNlbGVjdChsb2dfbmVpXzIwMDhfcG0yNV9zdW1fMTAwMDAsIGxvZ19wb3BkZW5zX2NvdW50eSwgbG9nX3ByaV9sZW5ndGhfMTAwMDAsIGltcF9hMTAwMDApICU+JQogIGdnY29ycihwYWxldHRlID0gIlJkQnUiLCAgaGp1c3QgPSAuODUsIHNpemUgPSAzLAogICAgICAgbGF5b3V0LmV4cD0yLCBsYWJlbCA9IFRSVUUpCgpwbSAlPiUKICBtdXRhdGUobG9nX3BvcGRlbnNfY291bnR5PSBsb2cocG9wZGVuc19jb3VudHkpKSAlPiUKc2VsZWN0KGxvZ19uZWlfMjAwOF9wbTI1X3N1bV8xMDAwMCwgbG9nX3BvcGRlbnNfY291bnR5LCBsb2dfcHJpX2xlbmd0aF8xMDAwMCwgaW1wX2ExMDAwMCkgJT4lCiAgZ2dwYWlycygpCmBgYAoKSW5kZWVkIHRoaXMgaW5jcmVhc2VkIHRoZSBjb3JyZWxhdGlvbiwgYnV0IHZhcmlhYmxlcyBmcm9tIGVhY2ggb2YgdGhlc2UgY2F0ZWdvcmllcyBtYXkgc3RpbGwgcHJvdmUgdG8gYmUgdXNlZnVsIGZvciBwcmVkaWN0aW9uLgoKTm93IHRoYXQgd2UgaGF2ZSBhIHNlbnNlIG9mIHdoYXQgb3VyIGRhdGEgaXMgbGlrZSB3ZSBjYW4gZ2V0IHN0YXJ0ZWQuCgojIyBEYXRhIEFuYWx5c2lzCgojIyMgVGhlIHRpZHltb2RlbHMgZWNvc3lzdGVtCgpUbyBwZXJmb3JtIG91ciBhbmFseXNpcyB3ZSB3aWxsIGJlIHVzaW5nIHRoZSBgdGlkeW1vZGVsc2Agc3VpdGUgb2YgcGFja2FnZXMuIFlvdSBtYXkgYmUgZmFtaWxpYXIgd2l0aCB0aGUgb2xkZXIgcGFja2FnZXMgYGNhcmV0YCBvciBgbWxyYCB3aGljaCBhcmUgYWxzbyBmb3IgbWFjaGluZSBsZWFybmluZyBhbmQgbW9kZWxpbmcgYnV0IGFyZSBub3QgYSBwYXJ0IG9mIHRoZSBgdGlkeXZlcnNlYC4gW01heCBLdWhuXShodHRwczovL3Jlc291cmNlcy5yc3R1ZGlvLmNvbS9hdXRob3JzL21heC1rdWhuKXt0YXJnZXQ9Il9ibGFuayJ9IGRlc2NyaWJlcyBgdGlkeW1vZGxlc2AgbGlrZSB0aGlzOgoKPiAiT3RoZXIgcGFja2FnZXMsIHN1Y2ggYXMgY2FyZXQgYW5kIG1sciwgaGVscCB0byBzb2x2ZSB0aGUgUiBtb2RlbCBBUEkgaXNzdWUuIFRoZXNlIHBhY2thZ2VzIGRvIGEgbG90IG9mIG90aGVyIHRoaW5ncyB0b286IHByZXByb2Nlc3NpbmcsIG1vZGVsIHR1bmluZywgcmVzYW1wbGluZywgZmVhdHVyZSBzZWxlY3Rpb24sIGVuc2VtYmxpbmcsIGFuZCBzbyBvbi4gSW4gdGhlIHRpZHl2ZXJzZSwgd2Ugc3RyaXZlIHRvIG1ha2Ugb3VyIHBhY2thZ2VzIG1vZHVsYXIgYW5kIHBhcnNuaXAgaXMgZGVzaWduZWQgb25seSB0byBzb2x2ZSB0aGUgaW50ZXJmYWNlIGlzc3VlLiBJdCBpcyBub3QgZGVzaWduZWQgdG8gYmUgYSBkcm9wLWluIHJlcGxhY2VtZW50IGZvciBjYXJldC4KVGhlIHRpZHltb2RlbHMgcGFja2FnZSBjb2xsZWN0aW9uLCB3aGljaCBpbmNsdWRlcyBwYXJzbmlwLCBoYXMgb3RoZXIgcGFja2FnZXMgZm9yIG1hbnkgb2YgdGhlc2UgdGFza3MsIGFuZCB0aGV5IGFyZSBkZXNpZ25lZCB0byB3b3JrIHRvZ2V0aGVyLiBXZSBhcmUgd29ya2luZyB0b3dhcmRzIGhpZ2hlci1sZXZlbCBBUElzIHRoYXQgY2FuIHJlcGxpY2F0ZSBhbmQgZXh0ZW5kIHdoYXQgdGhlIGN1cnJlbnQgbW9kZWwgcGFja2FnZXMgY2FuIGRvLiIKCgojIyMgVGhlIG1ham9yIGJlbmVmaXRzIG9mIHRpZHltb2RlbHMKMSkgc3RhbmRhcmRpemVkIHdvcmtmbG93L2Zvcm1hdC9ub3RhdGlvbiBhY3Jvc3MgZGlmZmVyZW50IHR5cGVzIG9mIGFsZ29yaXRobXMKMikgY2FuIGVhc2lseSBtb2RpZnkgcHJlcHJvY2Vzc2luZyBhbmQgcGFyYW1ldGVyIGFuZCBoeXBlci1wYXJhbWV0ZXIgdHVuaW5nIG1ha2luZyBvcHRpbWl6YXRpb24gZWFzeQoKCiMjIyBBbiBpbGx1c3RyYXRpb24gb2YgdGhlIG92ZXJhbGwgdGlkeW1vZGVscyBlY29zeXN0ZW0KCmBgYHtyLCBlY2hvPUZBTFNFLCBvdXQud2lkdGg9IjgwMHB4In0Ka25pdHI6OmluY2x1ZGVfZ3JhcGhpY3MoaGVyZTo6aGVyZSgiaW1nIiwic2ltcGxldGlkeW1vZGVscy5wbmciKSkKYGBgCgoKCgojIyMgU3BsaXR0aW5nIHRoZSBEYXRhCgpUaGUgZmlyc3Qgc3RlcCBhZnRlciBkYXRhIGV4cGxvcmF0aW9uIGluIG1hY2hpbmUgbGVhcm5pbmcgYW5hbHlzaXMgaXMgdG8gW3NwbGl0IHRoZSBkYXRhXShodHRwczovL3Rvd2FyZHNkYXRhc2NpZW5jZS5jb20vdHJhaW4tdmFsaWRhdGlvbi1hbmQtdGVzdC1zZXRzLTcyY2I0MGNiYTllNyl7dGFyZ2V0PSJfYmxhbmsifSBpbnRvICoqdHJhaW5pbmcqKiBhbmQgKip0ZXN0aW5nKiogZGF0YXNldHMuIAoKVGhlIHRyYWluaW5nIGRhdGFzZXQgd2lsbCBiZSB1c2VkIHRvIGJ1aWxkIGFuZCB0dW5lIG91ciBtb2RlbC4gVGhpcyBpcyB0aGUgZGF0YSB0aGF0IHRoZSBtb2RlbCAibGVhcm5zIm9uLgoKVGhlIHRlc3Rpbmcgc2V0IHdpbGwgYmUgdXNlZCB0byBldmFsdWF0ZSB0aGUgcGVyZm9ybWFuY2Ugb2Ygb3VyIG1vZGVsIGluIGEgbW9yZSBnZW5lcmFsaXphYmxlIHdheS4gV2hhdCBkbyB3ZSBtZWFuIGJ5ICJnZW5lcmFsaXphYmxlIi4KClJlbWVtYmVyIHRoYXQgb3VyIG1haW4gZ29hbCBpcyB0byB1c2Ugb3VyIG1vZGVsIHRvIGJlIGFibGUgdG8gcHJlZGljdCBhaXIgcG9sbHV0aW9uIGxldmVscyBpbiBhcmVhcyB3aGVyZSB0aGVyZSBhcmUgbm8gZ3JhdmltZXRyaWMgbW9uaXRvcnMuIFRoZXJlZm9yZSwgaWYgb3VyIG1vZGVsIGlzIHN1cGVyIGdvb2QgYXQgcHJlZGljdGluZyBhaXIgcG9sbHV0aW9uIHdpdGggdGhlIGRhdGEgdGhhdCB3ZSB1c2UgdG8gYnVpbGQgaXQsIGl0IG1pZ2h0IG5vdCBkbyB0aGUgYmVzdCBqb2IgZm9yIHRoZSBhcmVhcyB3aGVyZSB0aGVyZSBhcmUgZmV3IHRvIG5vIG1vbml0b3JzLiBUaGlzIHdvdWxkIGNhdXNlIHVzIHRvIGhhdmUgcmVhbGx5IGdvb2QgcHJlZGljdGlvbiBhY2N1cmFjeSBhbmQgd2UgbWlnaHQgYXNzdW1lIHRoYXQgd2Ugd2VyZSBnb2luZyB0byBkbyBhIGdvb2Qgam9iIGVzdGltYXRpbmcgYWlyIHBvbGx1dGlvbiBhbnkgdGltZSB3ZSB1c2Ugb3VyIG1vZGVsLCBidXQgaW4gZmFjdCB0aGlzIHdvdWxkIGxpa2VseSBub3QgYmUgdGhlIGNhc2UuIFRoaXMgc2l0dWF0aW9uIGlzIHdoYXQgd2UgY2FsbCAqKltvdmVyZml0dGluZ10oaHR0cHM6Ly90b3dhcmRzZGF0YXNjaWVuY2UuY29tL3RyYWluLXRlc3Qtc3BsaXQtYW5kLWNyb3NzLXZhbGlkYXRpb24taW4tcHl0aG9uLTgwYjYxYmVjYTRiNil7dGFyZ2V0PSJfYmxhbmsifSAqKi4KCk92ZXJmaXR0aW5nIGhhcHBlbnMgd2hlbiB3ZSBlbmQgdXAgbW9kZWxpbmcgbm90IG9ubHkgdGhlIG1ham9yIHJlbGF0aW9uc2hpcHMgaW4gb3VyIGRhdGEgYnV0IGFsc28gdGhlIG5vaXNlIHdpdGhpbiBvdXIgZGF0YS4gCgoKYGBge3J9CmtuaXRyOjppbmNsdWRlX2dyYXBoaWNzKCJodHRwczovL21pcm8ubWVkaXVtLmNvbS9tYXgvMTExMC8xKnRCRXJYWVZ2VHcyalNVWUs3dGhVMkEucG5nIikKYGBgCgojIyMjIyBbW3NvdXJjZV0oaHR0cHM6Ly9taXJvLm1lZGl1bS5jb20vbWF4LzExMTAvMSp0QkVyWFlWdlR3MmpTVVlLN3RoVTJBLnBuZyldCgpJZiB3ZSBnZXQgZmFpcmx5IGdvb2QgcHJlZGljdGlvbiB3aXRoIG91ciB0ZXN0aW5nIHNldCB0aGVuIHdlIHdpbGwga25vdyB0aGF0IG91ciBtb2RlbCBjYW4gYmUgYXBwbGllZCB0byBvdGhlciBkYXRhIGFuZCB3aWxsIHBlcmZvcm0gZmFpcmx5IHdlbGwuIFdlIHdpbGwgZGlzY3VzcyB0aGUgbW9yZSBsYXRlci4KCldlIHdpbGwgbm90IHRvdWNoIHRoZSB0ZXN0aW5nIHNldCB1bnRpbCB3ZSBoYXZlIGNvbXBsZXRlZCB0dW5pbmcgb3IgbW9kZWwgd2l0aCB0aGUgdHJhaW5pbmcgc2V0LiBUaGlzIHdpbGwgYWxsb3cgdXMgdG8gaGF2ZSBhIGxlc3MgYmlhc2VkIGV2YWx1YXRpb24gb2YgaG93IHdlbGwgb3VyIG1vZGVsIGNhbiBkbyB3aXRoIG90aGVyIGRhdGEgYmVzaWRlcyB0aGUgZGF0YSB1c2VkIGluIHRoZSB0cmFpbmluZyBzZXQgdG8gYnVpbGQgdGhlIG1vZGVsLiBJZGVhbGx5IHlvdSB3b3VsZCBhbHNvIHdhbnQgYSBjb21wbGV0ZWx5IGluZGVwZW5kZW50IGRhdGFzZXQgdG8gZnVydGhlciB0ZXN0IHRoZSBwZXJmb3JtYW5jZSBvZiB5b3VyIG1vZGVsLgoKW0hlcmVdKGh0dHBzOi8vbWFjaGluZWxlYXJuaW5nbWFzdGVyeS5jb20vZGlmZmVyZW5jZS10ZXN0LXZhbGlkYXRpb24tZGF0YXNldHMvKXt0YXJnZXQ9Il9ibGFuayJ9IGlzIGEgZ3JlYXQgZGVzY3JpcHRpb24gb2YgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gdGVzdGluZyBhbmQgdHJhaW5pbmcgZGF0YXNldHMuCgpgYGB7ciwgZWNobz1GQUxTRSwgb3V0LndpZHRoPSI0MDBweCJ9CmtuaXRyOjppbmNsdWRlX2dyYXBoaWNzKGhlcmU6OmhlcmUoImltZyIsInNwbGl0LnBuZyIpKQpgYGAKV2Ugd2lsbCB1c2UgdGhlIGByc2FtcGxlYCBwYWNrYWdlIHRvIHBlcmZvcm0gdGhpcyBzdGVwLgoKVGhlYGluaXRpYWxfc3BsaXQoKWAgZnVuY3Rpb24gYWxsb3dzIHVzIHRvIHNwZWNpZnkgaG93IHdlIHdhbnQgdG8gc3BsaXQgb3VyIGRhdGEuIFR5cGljYWxseSBkYXRhIGlzIHNwbGl0IGludG8gMy80IGZvciB0cmFpbmluZyBhbmQgMS80IGZvciB0ZXN0aW5nLlRoaXMgaXMgdGhlIGRlZmF1bHQgcHJvcG9ydGlvbiBhbmQgZG9lcyBub3QgbmVlZCB0byBiZSBzcGVjaWZpZWQuIEhvd2V2ZXIgeW91IGNhbiBjaGFuZ2UgdGhlIHByb3BvcnRpb24gdXNpbmcgdGhlIGBwcm9wYCBhcmd1bWVudCwgd2Ugd2lsbCBkbyB0aGF0IGhlcmUgZm9yIGlsbHVzdHJhdGl2ZSBwdXJwb3Nlcy4gWW91IGNhbiBhbHNvIHNwZWNpZnkgYSB2YXJpYWJsZSB0byBzdHJhdGlmeSBieSB3aXRoIHRoZSBgc3RyYXRhYCBhcmd1bWVudC4gVGhpcyBpcyB1c2VmdWwgaWYgeW91IGhhdmUgaW1iYWxhbmNlZCBjYXRlZ29yaWNhbCB2YXJpYWJsZXMgYW5kIHlvdSB3b3VsZCBsaWtlIHRvIGludGVudGlvbmFsbHkgbWFrZSBzdXJlIHRoYXQgdGhlcmUgYXJlIHNpbWlsYXIgbnVtYmVyIG9mIHNhbXBsZXMgb2YgdGhlIHJhcmVyIGNhdGVnb3JpZXMgaW4gYm90aCB0aGUgdGVzdGluZyBhbmQgdHJhaW5pbmcgc2V0cy4gT3RoZXJ3aXNlIHRoZSBzcGxpdCBpcyBwZXJmb3JtZWQgcmFuZG9tbHkuIAoKPiBUaGUgc3RyYXRhIGFyZ3VtZW50IGNhdXNlcyB0aGUgcmFuZG9tIHNhbXBsaW5nIHRvIGJlIGNvbmR1Y3RlZCB3aXRoaW4gdGhlIHN0cmF0aWZpY2F0aW9uIHZhcmlhYmxlLiBUaGUgY2FuIGhlbHAgZW5zdXJlIHRoYXQgdGhlIG51bWJlciBvZiBkYXRhIHBvaW50cyBpbiB0aGUgdHJhaW5pbmcgZGF0YSBpcyBlcXVpdmFsZW50IHRvIHRoZSBwcm9wb3J0aW9ucyBpbiB0aGUgb3JpZ2luYWwgZGF0YSBzZXQuCgpJbiB0aGUgY2FzZSB3aXRoIG91ciBkYXRhc2V0LCBwZXJoYXBzIHdvdWxkIGxpa2Ugb3VyIHRyYWluaW5nIHNldCB0byBoYXZlIHNpbWlsYXIgcHJvcG9ydGlvbnMgb2YgbW9uaXRvcnMgZnJvbSBlYWNoIG9mIHRoZSBzdGF0ZXMgYXMgaW4gdGhlIGluaXRpYWwgZGF0YS4gVGhpcyBtaWdodCBiZSB1c2VmdWwgaWYgd2Ugd2FudCBvdXIgbW9kZWwgdG8gYmUgZ2VuZXJhbGl6YWJsZSBhY3Jvc3MgYWxsIG9mIHRoZSBzdGF0ZXMuCgpXZSBjYW4gc2VlIHRoYXQgaW5kZWVkIHRoZXJlIGFyZSBkaWZmZXJlbnQgcHJvcG9ydGlvbnMgb2YgbW9uaXRvcnMgaW4gZWFjaCBzdGF0ZSBieSB1c2luZyB0aGUgYGNvdW50KClgIGZ1bmN0aW9uIG9mIHRoZSBgZHB5cmAgcGFja2FnZS4gCgojIyMjIHsuc2Nyb2xsYWJsZSB9CmBgYHtyfQojIFNjcm9sbCB0aHJvdWdoIHRoZSBvdXRwdXQhCmNvdW50KHBtLCBzdGF0ZSkgJT4lCiAgcHJpbnQobiA9IDFlMykKYGBgCiMjIyMKCklmIG91ciBkYXRhc2V0IHdlcmUgbGFyZ2UgZW5vdWdoIGl0IG1pZ2h0IGJlIG5pY2UgdGhlbiB0byBzdHJhdGlmeSBieSBzdGF0ZSwgYnV0IG91ciBkYXRhIGlzIG5vdCB1bmZvcnR1bmF0ZWx5IG5vdCBsYXJnZSBlbm91Z2guIFdlIHdpbGwgc2hvdyBob3cgb25lIHdvdWxkIGRvIHRoaXMgdGhvdWdoIGZvciBpbGx1c3RyYXRpdmUgcHVycG9zZXMuIFRoaXMgb3B0aW9uIGlzIG1vcmUgaW1wb3J0YW50IGZvciBjbGFzc2lmaWNhdGlvbiBhcHBsaWNhdGlvbnMgb2YgbWFjaGluZSBsZWFybmluZyB0aGFuIGl0IGlzIGZvciBwcmVkaWN0aW9uLgoKU2luY2UgdGhlIHNwbGl0IGlzIHBlcmZvcm1lZCByYW5kb21seSwgaXQgaXMgYSBnb29kIGlkZWEgdG8gdXNlIHRoZSBgc2V0LnNlZWQoKWAgYmFzZSBmdW5jdGlvbiB0byBlbnN1cmUgdGhhdCBpZiB5b3VyIHJlcnVuIHlvdXIgY29kZSB0aGF0IHlvdXIgc3BsaXQgd2lsbCBiZSB0aGUgc2FtZSBuZXh0IHRpbWUuIFdlIGNhbiBzZWUgdGhlIG51bWJlciBvZiBtb25pdG9ycyBpbiBvdXIgdHJhaW5pbmcsIHRlc3RpbmcsIGFuZCBvcmlnaW5hbCBkYXRhIGJ5IHR5cGluZyBpbiB0aGUgbmFtZSBvZiBvdXIgc3BsaXQgb2JqZWN0LiBUaGUgcmVzdWx0IHdpbGwgbG9vayBsaWtlIHRoaXM6Cjx0cmFpbmluZyBkYXRhIHNhbXBsZSBudW1iZXIsIHRlc3RpbmcgZGF0YSBzYW1wbGUgbnVtYmVyLCBvcmlnaW5hbCBzYW1wbGUgbnVtYmVyPiAKCmBgYHtyfQpzZXQuc2VlZCgxMjM0KQpwbV9zcGxpdCA8LXJzYW1wbGU6OmluaXRpYWxfc3BsaXQoZGF0YSA9IHBtLCBwcm9wID0gMi8zKQpwbV9zcGxpdAoKIyBJZiBzdHJhdGlmeWluZzoKIyBwbV9zcGxpdF9zdHJhdGEgPC1yc2FtcGxlOjppbml0aWFsX3NwbGl0KGRhdGEgPSBwbSwgcHJvcCA9IDIvMywgc3RyYXRhID0gInN0YXRlIikKCmBgYAoKSW1wb3J0YW50bHkgdGhlIGBpbml0aWFsX3NwbGl0YCBmdW5jdGlvbiBvbmx5IGRldGVybWluZXMgd2hhdCByb3dzIG9mIG91ciBwbSBkYXRhIGZyYW1lIHNob3VsZCBiZSBhc3NpZ25lZCBmb3IgdHJhaW5pbmcgb3IgdGVzdGluZywgaXQgZG9lcyBub3QgYWN0dWFsbHkgc3BsaXQgdGhlIGRhdGEuIAoKVG8gZXh0cmFjdCB0aGUgdGVzdGluZyBhbmQgdHJhaW5pbmcgZGF0YSB3ZSBjYW4gdXNlIHRoZSBgdHJhaW5pbmcoKWAgYW5kIGB0ZXN0aW5nKClgIGZ1bmN0aW9ucyBhbHNvIG9mIHRoZSBgcnNhbXBsZWAgcGFja2FnZS4KCiMjIyMgey5zY3JvbGxhYmxlIH0KYGBge3J9CiB0cmFpbl9wbSA8LXJzYW1wbGU6OnRyYWluaW5nKHBtX3NwbGl0KQogdGVzdF9wbSA8LXJzYW1wbGU6OnRlc3RpbmcocG1fc3BsaXQpCiAKIyBTY3JvbGwgdGhyb3VnaCB0aGUgb3V0cHV0IQpjb3VudCh0cmFpbl9wbSwgc3RhdGUpCmNvdW50KHRlc3RfcG0sIHN0YXRlKQpgYGAKIyMjIwoKV2Ugd2lsbCB1c2UgdGhlIGByc2FtcGxlYCBwYWNrYWdlIGFnYWluIHdlIGxvb2sgYXQgaW1wbGVtZW50aW5nIHdoYXQgYXJlIGNhbGxlZCBjcm9zcyB2YWxpZGF0aW9uIHRlY2huaXF1ZXMuCgpDcm9zcyB2YWxpZGF0aW9uIHNwbGl0cyBvdXIgdHJhaW5pbmcgZGF0YSBpbnRvIG11bHRpcGxlIHRyYWluaW5nIGRhdGEgc2V0cyB0byBhbGxvdyBmb3IgYW4gYXNzZXNzbWVudCBvZiB0aGUgYWNjdXJhY3kgb2YgdGhlIG1vZGVsIGFzIHdlIGFyZSB0cmFpbmluZyBpdC4gICh3b3JrZmxvd3M6OmZpdF9yZXNhbXBsZXMoKSkKCk5vdGU6IFBlb3BsZSB0eXBpY2FsbHkgaWdub3JlIHNwYXRpYWwgZGVwZW5kZW5jZSB3aXRoIGNyb3NzIHZhbGlkYXRpb24gb2YgYWlyIHBvbGx1dGlvbiBtb25pdG9yaW5nIGRhdGEgaW4gdGhlIGFpciBwb2xsdXRpb24gZmllbGQsIHNvIHdlIHdpbGwgZG8gdGhlIHNhbWUuICBIb3dldmVyLCBpdCBtaWdodCBtYWtlIHNlbnNlIHRvIGxlYXZlIG91dCBibG9ja3Mgb2YgbW9uaXRvcnMgcmF0aGVyIHRoYW4gIHJhbmRvbSBpbmRpdmlkdWFsIG1vbml0b3JzIHRvIGhlbHAgYWNjb3VudCBmb3Igc29tZSBzcGF0aWFsIGRlcGVuZGVuY2UuCgojIyMgVmFyaWFibGUgUm9sZSBBc3NpZ25tZW50IGFuZCBQcmVwcm9jZXNzaW5nCgpBIHJlY2lwZSBpcyBhIHN0YW5kYXJkaXplZCBmb3JtYXQgZm9yIGEgc2VxdWVuY2Ugb2Ygc3RlcHMgZm9yIHByb2Nlc3NpbmcgdGhlIGRhdGEuCgpUaGlzIGNhbiBiZSB2ZXJ5IHVzZWZ1bCBiZWNhdXNlIGl0IG1ha2VzIHRlc3Rpbmcgb3V0IGRpZmZlcmVudCBwcmVwcm9jZXNzaW5nIHN0ZXBzIG9yIGRpZmZlcmVudCBhbGdvcml0aG1zIHdpdGggdGhlIHNhbWUgcHJlcHJvY2Vzc2luZyB2ZXJ5IGVhc3kgYW5kIHJlcHJvZHVjaWJsZS4KCioqQ3JlYXRpbmcgYSByZWNpcGUgc3BlY2lmaWVzIGhvdyBhIGRhdGFmcmFtZSBvZiBwcmVkaWN0b3JzIHNob3VsZCBiZSBjcmVhdGVkICAtIGl0IHNwZWNpZmllcyB3aGF0ICB2YXJpYWJsZXMgdG8gYmUgdXNlZCAgYW5kIHRoZSAgcHJlcHJvY2Vzc2luZyBzdGVwcyAgYnV0IGl0IGRvZXMgbm90IGV4ZWN1dGUgdGhlc2Ugc3RlcHMgb3IgY3JlYXRlIHRoZSBkYXRhZnJhbWUgb2YgcHJlZGljdG9ycy4qKgoKIyMjIyBMaXN0IHRoZSBpbmdyZWRpZW50cyAvIHNwZWNpZnkgdGhlIHZhcmlhYmxlcyB3aXRoIHRoZSBgcmVjaXBlKClgIGZ1bmN0aW9uCgpUaGUgZmlyc3QgdGhpbmcgdG8gZG8gdG8gY3JlYXRlIGEgcmVjaXBlIGlzIHRvIHNwZWNpZnkgd2hpY2ggdmFyaWFibGVzIHdlIHdpbGwgYmUgdXNpbmcgYXMgb3VyIG91dGNvbWUgYW5kIHByZWRpY3RvcnMgdXNpbmcgdGhlIGByZWNpcGUoKWAgZnVuY3Rpb24uIEluIHRlcm1zIG9mIHRoZSBtZXRhcGhvciBvZiBiYWtpbmcsIHdlIGNhbiB0aGluayBvZiB0aGlzIGFzIGxpc3Rpbmcgb3VyIGluZ3JlZGllbnRzLiBUaGUgbmFtaW5nIGNvbnZlbnRpb24gZm9yIHJlY2lwZSBvYmplY3QgbmFtZXMgaXMgYCpfcmVjYCBvciBgcmVjYC4gCgpgYGB7ciwgZWNobz1GQUxTRSwgb3V0LndpZHRoPSI0MDBweCJ9CmtuaXRyOjppbmNsdWRlX2dyYXBoaWNzKGhlcmU6OmhlcmUoImltZyIsInJlY2lwZXMxLnBuZyIpKQpgYGAKCgpJbiBvdXIgY2FzZSByZWNhbGwgdGhhdCBvdXIgYHZhbHVlYCB2YXJpYWJsZSwgd2hpY2ggaXMgdGhlIGF2ZXJhZ2UgYW5udWFsIGdyYXZpbWV0cmljIG1vbml0b3IgUE1+Mi41fiBjb25jZW50cmF0aW9uIGluIHVnL21eM14uIE91ciBwcmVkaWN0b3JzIGFyZSBhbGwgdGhlIG90aGVyIHZhcmlhYmxlcyBleGNlcHQgdGhlIG1vbml0b3IgSUQsIHdoaWNoIGlzIHRoZSBgaWRgIHZhcmlhYmxlLgoKVGhlIHJlYXNvbiBub3QgdG8gaW5jbHVkZSB0aGlzIHZhcmlhYmxlIGlzIGJlY2F1c2UgdGhpcyB2YXJpYWJsZSBpbmNsdWRlcyB0aGUgY291bnR5IG51bWJlciBhbmQgYSBudW1iZXIgZGVzaWduYXRpbmcgd2hpY2ggcGFydGljdWxhciBtb25pdG9yIHRoZSB2YWx1ZXMgY2FtZSBmcm9tIG9mIHRoZSBtb25pdG9ycyB0aGVyZSBhcmUgaW4gdGhhdCBjb3VudHkuIFNpbmNlIHRoaXMgbnVtYmVyIGlzIGFyYml0cmFyeSBhbmQgdGhlIGNvdW50eSBpbmZvcm1hdGlvbiBpcyBhbHNvIGdpdmVuIGluIHRoZSBkYXRhLCBhbmQgdGhlIGZhY3QgdGhhdCBlYWNoIG1vbml0b3Igb25seSBoYXMgb25lIHZhbHVlIGluIHRoZSBgdmFsdWVgIHZhcmlhYmxlLCBub3RoaW5nIGlzIGdhaW5lZCBieSBpbmNsdWRpbmcgdGhpcyB2YXJpYWJsZSBhbmQgaXQgbWF5IGluc3RlYWQgaW50cm9kdWNlIG5vaXNlLiBIb3dldmVyLCBpdCBpcyB1c2VmdWwgdG8ga2VlcCB0aGlzIGRhdGEgdG8gdGFrZSBhIGxvb2sgYXQgd2hhdCBpcyBoYXBwZW5pbmcgbGF0ZXIuIFdlIHdpbGwgc2hvdyB5b3Ugd2FudCB0byBkbyBpbiB0aGlzIGNhc2UgaW4ganVzdCBhIGJpdC4KClRoZSBzaW1wbGVzdCByZWNpcGUgd2l0aCBubyBwcmVwcm9jZXNzaW5nIHN0ZXBzLCB3b3VsZCBiZSB0byBzaW1wbHkgbGlzdCB0aGUgb3V0Y29tZSBhbmQgcHJlZGljdG9yIHZhcmlhYmxlcy4KCldlIGNhbiBkbyBzbyBpbiB0d28gd2F5cy4gCgoxKSBVc2luZyBmb3JtdWxhIG5vdGF0aW9uCjIpIEFzc2lnbmluZyByb2xlcyB0byBlYWNoIHZhcmlhYmxlCgpMZXQncyBsb29rIGF0IHRoZSBmaXJzdCB3YXkgdXNpbmcgZm9ybXVsYSBub3RhdGlvbiwgd2hpY2ggbG9va3MgbGlrZSB0aGlzOgoKb3V0Y29tZShzKSB+IHByZWRpY3RvcihzKSAgCgpJZiBpbiB0aGUgY2FzZSBvZiBtdWx0aXBsZSBwcmVkaWN0b3JzIG9yIGEgbXVsdGl2YXJpYXRlIHNpdHVhdGlvbiB3aXRoIHR3byBvdXRjb21lcywgdXNlIGEgcGx1cyBzaWduCgpvdXRjb21lMSArIG91dGNvbWUyIH4gcHJlZGljdG9yMSArIHByZWRpY3RvcjIKCklmIHdlIHdhbnQgdG8gaW5jbHVkZSBhbGwgcHJlZGljdG9ycyB3ZSBjYW4gdXNlIGEgcGVyaW9kIGxpa2Ugc286CgpvdXRjb21lX3ZhcmlhYmxlX25hbWUgfiAuCgpOb3cgd2l0aCBvdXIgZGF0YSB3ZSB3aWxsIHN0YXJ0IGJ5IG1ha2luZyBhIHJlY2lwZSBmb3Igb3VyIHRyYWluaW5nIGRhdGEuIEluIHRoZSBzaW1wbGVzdCBjYXNlIHdlIG1pZ2h0IHVzZSBhbGwgcHJlZGljdG9ycyBsaWtlIHRoaXM6CgpgYGB7cn0KCnNpbXBsZV9yZWMgPC10cmFpbl9wbSAlPiUKICByZWNpcGVzOjpyZWNpcGUodmFsdWUgfiAuKQoKc2ltcGxlX3JlYwpgYGAKCgpIb3dldmVyLCB0byBkZWFsIHdpdGggdGhlIGlkIHZhcmlhYmxlIHdlIGNvdWxkIHVzZSB0aGUgYHVwZGF0ZV9yb2xlKClgIGZ1bmN0aW9uIG9mIHRoZSBgcmVjaXBlc2AgcGFja2FnZToKCmBgYHtyfQoKc2ltcGxlX3JlYyA8LXRyYWluX3BtICU+JQogIHJlY2lwZXM6OnJlY2lwZSh2YWx1ZSB+IC4pICU+JQogIHJlY2lwZXM6OnVwZGF0ZV9yb2xlKGlkLCBuZXdfcm9sZSA9ICJpZCB2YXJpYWJsZSIpCgpzaW1wbGVfcmVjCmBgYApXZSBjb3VsZCBhbHNvIHNwZWNpZnkgdGhlIG91dGNvbWUgYW5kIHByZWRpY3RvcnMgaW4gdGhlIHNhbWUgd2F5IGFzIHRoZSBpZCB2YXJpYWJsZS4gUGxlYXNlIHNlZSBbaGVyZV0oaHR0cHM6Ly90aWR5bW9kZWxzLmdpdGh1Yi5pby9yZWNpcGVzL3JlZmVyZW5jZS9yZWNpcGUuaHRtbCkgZm9yIGV4YW1wbGVzIG9mIG90aGVyIHJvbGVzIGZvciB2YXJpYWJsZXMuIFRoZSByb2xlIGNhbiBiZSBob3dldmVyIGFueSB2YWx1ZS4gVGhlIG9yZGVyIGlzIGltcG9ydGFudCBoZXJlLCBhcyB3ZSBmaXJzdCBtYWtlIGFsbCB2YXJpYWJsZXMgcHJlZGljdG9ycyBhbmQgdGhlbiBvdmVycmlkZSB0aGlzIHJvbGUgZm9yIHRoZSBvdXRjb21lIGFuZCBpZCB2YXJpYWJsZS4gV2Ugd2lsbCB1c2UgdGhlIGBldmVyeXRoaW5nKClgIGZ1bmN0aW9uIG9mIHRoZSBgZHBseXJgIHBhY2thZ2UgdG8gc3RhcnQgd2l0aCBhbGwgb2YgdGhlIHZhcmlhYmxlcyBpbiBgdHJhaW5fcG1gLgoKYGBge3J9CgpzaW1wbGVfcmVjIDwtcmVjaXBlKHRyYWluX3BtKSAlPiUKICAgIHVwZGF0ZV9yb2xlKGV2ZXJ5dGhpbmcoKSwgbmV3X3JvbGUgPSAicHJlZGljdG9yIiklPiUKICAgIHVwZGF0ZV9yb2xlKHZhbHVlLCBuZXdfcm9sZSA9ICJvdXRjb21lIiklPiUKICAgIHVwZGF0ZV9yb2xlKGlkLCBuZXdfcm9sZSA9ICJpZCB2YXJpYWJsZSIpCgpzaW1wbGVfcmVjCgpgYGAKCklmIHdlIHdhbnQgdG8gdGFrZSBhIGxvb2sgYXQgb3VyIGZvcm11bGEgZnJvbSBvdXIgcmVjaXBlIHdlIGNhbiBkbyB1c2UgdGhlIGBmb3JtdWxhKClgIGZ1bmN0aW9uIG9mIHRoZSBgc3RhdHNgIHBhY2thZ2UuCgpgYGB7cn0KZm9ybXVsYShzaW1wbGVfcmVjKQpgYGAKCldlIGNhbiBhbHNvIHZpZXcgb3VyIHJlY2lwZSBpbiBtb3JlIGRldGFpbCB1c2luZyB0aGUgYmFzZSBgc3VtbWFyeSgpYCBmdW5jdGlvbi4KCmBgYHtyfQpzdW1tYXJ5KHNpbXBsZV9yZWMpCmBgYAoKIyMjIyBMaXN0IHRoZSBwcmVwcm9jZXNzaW5nIHN0ZXBzIHVzaW5nIHRoZSBzdGVwIGZ1bmN0aW9ucyBvZiB0aGUgYHJlY2lwZWAgcGFja2FnZQoKVGhlIG90aGVyIHRoaW5nIHRoZSByZWNpcGVzIHBhY2thZ2UgYWxsb3dzIGZvciBpcyBzcGVjaWZ5aW5nIHByZXByb2Nlc3Npbmcgc3RlcHMuCgpgYGB7ciwgZWNobz1GQUxTRSwgb3V0LndpZHRoPSI0MDBweCJ9CmtuaXRyOjppbmNsdWRlX2dyYXBoaWNzKGhlcmU6OmhlcmUoImltZyIsInJlY2lwZXMyLnBuZyIpKQpgYGAKCgoqKlRoaXMgW2xpbmtdKGh0dHBzOi8vdGlkeW1vZGVscy5naXRodWIuaW8vcmVjaXBlcy9yZWZlcmVuY2UvaW5kZXguaHRtbCl7dGFyZ2V0PSJfYmxhbmsifSBhbmQgdGhpcyBbbGlua10oaHR0cHM6Ly9jcmFuLnItcHJvamVjdC5vcmcvd2ViL3BhY2thZ2VzL3JlY2lwZXMvcmVjaXBlcy5wZGYpe3RhcmdldD0iX2JsYW5rIn0gc2hvdyB0aGUgbWFueSBvcHRpb25zIGZvciByZWNpcGUgc3RlcCBmdW5jdGlvbnMuKioKCjx1PlRoZXJlIGFyZSBzdGVwIGZ1bmN0aW9ucyBmb3IgYSB2YXJpZXR5IG9mIHB1cnBvc2VzOjwvdT4KCjEpIFsqKkltcHV0YXRpb24qKl0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSW1wdXRhdGlvbl8oc3RhdGlzdGljcykpe3RhcmdldD0iX2JsYW5rIn0gIC0tIHdoaWNoIG1lYW5zIGZpbGxpbmcgaW4gbWlzc2luZyB2YWx1ZXMgYmFzZWQgb24gdGhlIGV4aXN0aW5nIGRhdGEgCjIpIFsqKlRyYW5zZm9ybWF0aW9uKipdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0RhdGFfdHJhbnNmb3JtYXRpb25fKHN0YXRpc3RpY3MpKXt0YXJnZXQ9Il9ibGFuayJ9ICAtLSB3aGljaCBtZWFucyBjaGFuZ2luZyBhbGwgdmFsdWVzIG9mIGEgdmFyaWFibGUgaW4gdGhlIHNhbWUgd2F5LCB0eXBpY2FsbHkgdG8gbWFrZSBpdCBtb3JlIG5vcm1hbCBvciBlYXNpZXIgdG8gaW50ZXJwcmV0KSAgCjMpIFsqKkRpc2NyZXRpemF0aW9uKipdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0Rpc2NyZXRpemF0aW9uX29mX2NvbnRpbnVvdXNfZmVhdHVyZXMpIC0tIHdoaWNoIG1lYW5zIGNvbnZlcnRpbmcgY29udGludW91cyB2YWx1ZXMgaW50byBkaXNjcmV0ZSBvciBub21pbmFsIHZhbHVlcyAtIGJpbm5pbmcgZm9yIGV4YW1wbGUgdG8gcmVkdWNlIHRoZSBudW1iZXIgb2YgcG9zc2libGUgbGV2ZWxzKSAgKEhvd2V2ZXIgdGhpcyBpcyBnZW5lcmFsbHkgbm90IGFkdmlzYWJsZSEpCjQpIFsqKkVuY29kaW5nIC8gQ3JlYXRpbmcgRHVtbXkgVmFyaWFibGVzKipdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0R1bW15X3ZhcmlhYmxlXyhzdGF0aXN0aWNzKSkgLS0gd2hpY2ggbWVhbnMgY3JlYXRpbmcgYSBudW1lcmljIGNvZGUgZm9yIGNhdGVnb3JpY2FsIHZhcmlhYmxlcwpbKipNb3JlIG9uIER1bW15IFZhcmlhYmxlcyBhbmQgb25lIGhvdCBlbmNvZGluZyoqXShodHRwczovL21lZGl1bS5jb20vcC9iNTg0MGJlM2M0MWEvcmVzcG9uc2VzL3Nob3cpCjUpIFsqKkRhdGEgdHlwZSBjb252ZXJzaW9ucyoqXShodHRwczovL2NyYW4uci1wcm9qZWN0Lm9yZy93ZWIvcGFja2FnZXMvaGFibGFyL3ZpZ25ldHRlcy9jb252ZXJ0Lmh0bWwpIC0tIHdoaWNoIG1lYW5zIGNoYW5naW5nIGZyb20gaW50ZWdlciB0byBmYWN0b3Igb3IgbnVtZXJpYyB0byBkYXRlIGV0Yy4KNikgWyoqSW50ZXJhY3Rpb24qKl0oaHR0cHM6Ly9zdGF0aXN0aWNzYnlqaW0uY29tL3JlZ3Jlc3Npb24vaW50ZXJhY3Rpb24tZWZmZWN0cy8pIHRlcm0gYWRkaXRpb24gdG8gdGhlIG1vZGVsIC0tIHdoaWNoIG1lYW5zIHRoYXQgd2Ugd291bGQgYmUgbW9kZWxpbmcgZm9yIHByZWRpY3RvcnMgdGhhdCB3b3VsZCBpbmZsdWVuY2UgdGhlIGNhcGFjaXR5IG9mIGVhY2ggb3RoZXIgdG8gcHJlZGljdCB0aGUgb3V0Y29tZQo3KSBbKipOb3JtYWxpemF0aW9uKipdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL05vcm1hbGl6YXRpb25fKHN0YXRpc3RpY3MpKSAtLSB3aGljaCBtZWFucyBjZW50ZXJpbmcgYW5kIHNjYWxpbmcgdGhlIGRhdGEgdG8gYSBzaW1pbGFyIHJhbmdlIG9mIHZhbHVlcwo4KSBbKipEaW1lbnNpb25hbGl0eSBSZWR1Y3Rpb24vIFNpZ25hbCBFeHRyYWN0aW9uKipdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0RpbWVuc2lvbmFsaXR5X3JlZHVjdGlvbikgLS0gd2hpY2ggbWVhbnMgbWF0aGVtYXRpY2FsbHkgb2J0YWluaW5nIGEgbmV3IHNtYWxsZXIgc2V0IG9mIHZhcmlhYmxlcyB0aGF0IGNhcHR1cmUgdGhlIHZhcmlhdGlvbiBvciBzaWduYWwgaW4gdGhlIG9yaWdpbmFsIHZhcmlhYmxlcyAoZXguIFByaW5jaXBhbCBDb21wb25lbnQgQW5hbHlzaXMgYW5kIEluZGVwZW5kZW50IENvbXBvbmVudCBBbmFseXNpcykKOSkgKipGaWx0ZXJpbmcqKiAtLSBGaWx0ZXJpbmcgb3B0aW9ucyBmb3IgcmVtb3ZpbmcgdmFyaWFibGVzIChleC4gcmVtb3ZlIHZhcmlhYmxlcyB0aGF0IGFyZSBoaWdobHkgY29ycmVsYXRlZCB0byBvdGhlcnMgb3IgcmVtb3ZlIHZhcmlhYmxlcyB3aXRoIHZlcnkgbGl0dGxlIHZhcmlhbmNlIGFuZCB0aGVyZWZvcmUgbGlrZWx5IGxpdHRsZSBwcmVkaWN0aXZlIGNhcGFjaXR5KQoxMCkgWyoqUm93IG9wZXJhdGlvbnMqKl0oaHR0cHM6Ly90YXJ0YXJ1cy5vcmcvZ2FyZXRoL21hdGhzL0xpbmVhcl9BbGdlYnJhL3Jvd19vcGVyYXRpb25zLnBkZikgLS0gd2hpY2ggbWVhbnMgcGVyZm9ybWluZyBmdW5jdGlvbnMgb24gdGhlIHZhbHVlcyB3aXRoaW4gdGhlIHJvd3MgIChleC4gcmVhcnJhbmdpbmcsIGZpbHRlcmluZywgaW1wdXRpbmcpCjExKSAqKkNoZWNraW5nIGZ1bmN0aW9ucyoqIC0tIFNhbml0eSBjaGVja3MgdG8gbG9vayBmb3IgbWlzc2luZyB2YWx1ZXMsIHRvIGxvb2sgYXQgdGhlIHZhcmlhYmxlIGNsYXNzZXMgZXRjLgoKQWxsIG9mIHRoZSBzdGVwIGZ1bmN0aW9ucyBsb29rIGxpa2UgYHN0ZXBfKmAgZXhjZXB0IGZvciB0aGUgY2hlY2sgZnVuY3Rpb25zIHdoaWNoIGxvb2sgbGlrZSBgY2hlY2tfKmAuCgpUaGVyZSBhcmUgc2V2ZXJhbCB3YXlzIHRvIHNlbGVjdCB3aGF0IHZhcmlhYmxlcyB0byBhcHBseSBzdGVwcyB0bzogIAoxKSB0aWR5c2VsZWN0IG1ldGhvZHM6IGBjb250YWlucygpYCwgYG1hdGNoZXMoKWAsIGBzdGFydHNfd2l0aCgpYCwgYGVuZHNfd2l0aCgpYCwgYGV2ZXJ5dGhpbmcoKWAsIGBudW1fcmFuZ2UoKWAgIAoyKSBiYXNlZCBvbiB0aGUgdHlwZTogYGFsbF9ub21pbmFsKClgLCBgYWxsX251bWVyaWMoKWAgLCBgaGFzX3R5cGUoKWAgCjMpIGJhc2VkIG9uIHRoZSByb2xlOiBgYWxsX3ByZWRpY3RvcnMoKWAsIGBhbGxfb3V0Y29tZXMoKWAsIGBoYXNfcm9sZSgpYAo0KSBuYW1lIC0gdXNlIHRoZSBhY3R1YWwgbmFtZSBvZiB0aGUgdmFyaWFibGUvdmFyaWFibGVzIG9mIGludGVyZXN0ICAKCgpMZXQncyB0cnkgYWRkaW5nIHNvbWUgc3RlcHMgdG8gb3VyIHJlY2lwZS4KCldlIG1pZ2h0IGNvbnNpZGVyIGxvZyB0cmFuc2Zvcm1pbmcgb3VyIHBvcHVsYXRpb24gYW5kIGFyZWEgdmFyaWFibGVzICh0aGF0IGFyZW4ndCBkZW5zaXRpZXMpLSBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGUgcmFuZ2Ugb2YgdGhlc2UgdmFyaWFibGVzLgpgYGB7cn0KcG0gJT4lCiAgc2VsZWN0KG1hdGNoZXMoIl9wb3B8X2FyZWEiKSkgJT4lCiAgbWFwKHJhbmdlKQpgYGAKV2UgY2FuIHNlZSB0aGF0IHRoZSByYW5nZSBmb3IgZWFjaCBvZiB0aGVzZSB2YXJpYWJsZXMgaXMgcXVpdGUgbGFyZ2UsIHdlIGNhbiBsb2cgdHJhbnNmb3JtIHRoaXMgZGF0YSB1c2luZyB0aGUgYHN0ZXBfbG9nKClgIGZ1bmN0aW9uIG9mIHRoZSBgcmVjaXBlc2AgcGFja2FnZS4KCgpXZSB3b3VsZCBhbHNvIHdhbnQgdG8gcG90ZW50aWFsbHkgb25lIGhvdCBlbmNvZGUgc29tZSBvZiBvdXIgY2F0ZWdvcmljYWwgdmFyaWFibGVzIHNvIHRoYXQgdGhleSBjYW4gYmUgdXNlZCB3aXRoIGNlcnRhaW4gYWxnb3JpdGhtcy4gV2UgY2FuIGRvIHRoaXMgd2l0aCB0aGUgYHN0ZXBfZHVtbXkoKWAgZnVuY3Rpb24gYW5kIHRoZSBgb25lX2hvdCA9IFRSVUVgIGFyZ3VtZW50LiBPdXIgZmlwcyB2YXJpYWJsZSBpbmNsdWRlcyBhIG51bWVyaWMgY29kZSBmb3Igc3RhdGUgYW5kIGNvdW50eSAtIGFuZCB0aGVyZWZvcmUgaXMgZXNzZW50aWFsbHkgYSBwcm94eSBmb3IgY291bnR5LiAgU28gaWYgd2Ugb25lIGhvdCBlbmNvZGUgY291bnR5LCB3ZSB3b3VsZCB3YW50IHRvIGluY2x1ZGUgdGhpcyByYXRoZXIgdGhhbiB0aGUgZmlwcyBpZC4gVGhpcyB3b3VsZCBiZSBwcmVmZXJhYmxlIGJlY2F1c2UgdGhlIGZpcHMgaXMgcmVsYXRpdmVseSBzcGVha2luZyBhcmJpdHJhcnktIHRoZSBudW1iZXJzIGFsdGhvdWdoIG1lYW5pbmdmdWwgZG9uJ3QgcmVhbGx5IGhhdmUgYW4gb3JkZXIuIEp1c3QgYmVjYXVzZSBBbGFiYW1hIGNvbWVzIGZpcnN0IGluIHRoZSBhbHBoYWJldCwgZG9lcyBub3QgbWVhbiB0aGF0IG1vbml0b3JzIGluIHRoaXMgc3RhdGUgaGF2ZSBhIHJhbmsgb3JkZXIgZGlmZmVyZW50IGZyb20gbW9uaXRvcnMgaW4gV3lvbWluZy4KCldlIGNhbiByZW1vdmUgdGhlIGBmaXBzYCB2YXJpYWJsZSBmcm9tIHRoZSBwcmVkaWN0b3JzIHVzaW5nIGB1cGRhdGVfcm9sZSgpYCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgcm9sZSBpcyBubyBsb25nZXIgYCJwcmVkaWN0b3IiYC4gV2UgY2FuIG1ha2UgdGhlIHJvbGUgYW55dGhpbmcgd2Ugd2FudCBhY3R1YWxseSwgc28gd2Ugd2lsbCBrZWVwIGl0IHNvbWV0aGluZyBpZGVudGlmaWFibGUuCgpXZSBtaWdodCBhbHNvIHdhbnQgdG8gcmVtb3ZlIHZhcmlhYmxlcyB0aGF0IGFwcGVhciB0byBiZSByZWR1bmRhbnQgYW5kIGFyZSBoaWdobHkgY29ycmVsYXRlZCB3aXRoIG90aGVycywgYXMgd2Uga25vdyBmcm9tIG91ciBleHBsb3JhdG9yeSBkYXRhIGFuYWx5c2lzIHRoYXQgbWFueSBvZiBvdXIgdmFyaWFibGVzIGFyZSBjb3JyZWxhdGVkIHdpdGggb25lIGFub3RoZXIuIFdlIGNhbiBkbyB0aGlzIHVzaW5nIHRoZSBgc3RlcF9jb3JyKClgIGZ1bmN0aW9uLgoKKipJdCBpcyBpbXBvcnRhbnQgdG8gYWRkIHRoZSBzdGVwcyB0byB0aGUgcmVjaXBlIGluIGFuIG9yZGVyIHRoYXQgbWFrZXMgc2Vuc2UganVzdCBsaWtlIHdpdGggYSBjb29raW5nIHJlY2lwZS4qKgoKYGBge3J9CnNpbXBsZV9yZWMgJTw+JQogICNzdGVwX2xvZyhtYXRjaGVzKCJfcG9wfF9hcmVhIikpICU+JQogIHVwZGF0ZV9yb2xlKCJmaXBzIiwgbmV3X3JvbGUgPSAiY291bnR5IGlkIikgJT4lCiAgc3RlcF9kdW1teShzdGF0ZSwgY291bnR5LCBjaXR5LCB6Y3RhKSAlPiUKICAjc3RlcF9kdW1teShzdGF0ZSwgY291bnR5LCBjaXR5LCB6Y3RhLCBvbmVfaG90ID0gVFJVRSkgJT4lCiAgc3RlcF9uenYoYWxsX3ByZWRpY3RvcnMoKSkKICAjc3RlcF9jb3JyKGFsbF9wcmVkaWN0b3JzKCksIC0gQ01BUSwgLSBhb2QpICU+JQogIyBjaGVja19uZXdfdmFsdWVzKGFsbF9wcmVkaWN0b3JzKCkpICU+JQogICNjaGVja19yYW5nZShhbGxfcHJlZGljdG9ycygpKQoKICAKc2ltcGxlX3JlYwpgYGAKCgojIyMgT1BUSU9OQUw6IFJ1bm5pbmcgdGhlIHByZXByb2Nlc3NpbmcgKHRvIHNlZSBpdCkKClRoZSBuZXh0IG1ham9yIGZ1bmN0aW9uIG9mIHRoZSBgcmVjaXBlc2AgcGFja2FnZSBpcyBgcHJlcCgpYC4KClRoaXMgZnVuY3Rpb24gdXBkYXRlcyB0aGUgcmVjaXBlIG9iamVjdCBiYXNlZCBvbiB0aGUgdHJhaW5pbmcgZGF0YS4gSXQgZXN0aW1hdGVzIHBhcmFtZXRlcnMgKGVzdGltYXRpbmcgdGhlIHJlcXVpcmVkIHF1YW50aXRpZXMgYW5kIHN0YXRpc3RpY3MgcmVxdWlyZWQgYnkgdGhlIHN0ZXBzIGZvciB0aGUgdmFyaWFibGVzKSBmb3IgcHJlcHJvY2Vzc2luZyBhbmQgIHVwZGF0ZXMgdGhlIG1vZGVsIHRlcm1zLCBhcyBzb21lIG9mIHRoZSBwcmVkaWN0b3JzIG1heSBiZSByZW1vdmVkLCB0aGlzIGFsbG93cyB0aGUgcmVjaXBlIHRvIGJlIHJlYWR5IHRvIHVzZSBvbiBvdGhlciBkYXRhc2V0cy4gSXQgZG9lc24ndCBuZWNlc3NhcmlseSBhY3R1YWxseSBleGVjdXRlIHRoZSBwcmVwcm9jZXNzaW5nIGl0c2VsZiwgaG93ZXZlciB3ZSB3aWxsIHNwZWNpZnkgaW4gYXJndW1lbnQgZm9yIGl0IHRvIGRvIHRoaXMgc28gdGhhdCB3ZSBjYW4gdGFrZSBhIGxvb2sgYXQgdGhlIHByZXByb2Nlc3NlZCBkYXRhLgoKVGhlcmUgYXJlIHNvbWUgaW1wb3J0YW50IGFyZ3VtZW50cyB0byBrbm93IGFib3V0OgoxKSB0cmFpbmluZyAtIHlvdSBtdXN0IHN1cHBseSBhIHRyYWluaW5nIGRhdGEgc2V0IHRvIGVzdGltYXRlIHBhcmFtZXRlcnMgZm9yIHByZXByb2Nlc3Npbmcgb3BlcmF0aW9ucyAocmVjaXBlIHN0ZXBzKSAtIHRoaXMgbWF5IGFscmVhZHkgYmUgaW5jbHVkZWQgaW4geW91ciByZWNpcGUgLSBhcyBpcyB0aGUgY2FzZSBmb3IgdXMKMikgZnJlc2ggLSBpZiBUUlVFIC0gd2lsbCByZXRyYWluIGFuZCBlc3RpbWF0ZSBwYXJhbWV0ZXJzIGZvciBhbnkgcHJldmlvdXMgc3RlcHMgdGhhdCB3ZXJlIGFscmVhZHkgcHJlcHBlZCBpZiB5b3UgYWRkIG1vcmUgc3RlcHMgdG8gdGhlIHJlY2lwZQozKSB2ZXJib3NlIC0gaWYgYFRSVUVgIHNob3dzIHRoZSBwcm9ncmVzcyBhcyB0aGUgc3RlcHMgYXJlIGV2YWx1YXRlZCBhbmQgdGhlIHNpemUgb2YgdGhlIHByZXByb2Nlc3NlZCB0cmFpbmluZyBzZXQKNCkgcmV0YWluIC0gaWYgYFRSVUVgIHRoZW4gdGhlIHByZXByb2Nlc3NlZCB0cmFpbmluZyBzZXQgd2lsbCBiZSBzYXZlZCB3aXRoaW4gdGhlIHJlY2lwZSAoYXMgdGVtcGxhdGUpLiBUaGlzIGlzIGdvb2QgaWYgeW91IGFyZSBsaWtlbHkgdG8gYWRkIG1vcmUgc3RlcHMgYW5kIGRvbid0IHdhbnQgdG8gcmVydW4gdGhlIGBwcmVwKClgIG9uIHRoZSBwcmV2aW91cyBzdGVwcy4gSG93ZXZlciB0aGlzIGNhbiBtYWtlIHRoZSByZWNpcGUgc2l6ZSBsYXJnZS4gVGhpcyBpcyBuZWNlc3NhcnkgaWYgeW91IHdhbnQgdG8gYWN0dWFsbHkgbG9vayBhdCB0aGUgcHJlcHJvY2Vzc2VkIGRhdGEuCgoKYGBge3J9CnByZXBwZWRfcmVjIDwtIHByZXAoc2ltcGxlX3JlYywgdmVyYm9zZSA9IFRSVUUsIHJldGFpbiA9IFRSVUUgKQpuYW1lcyhwcmVwcGVkX3JlYykKYGBgCgpUaGVyZSBhcmUgYWxzbyBsb3RzIG9mIHVzZWZ1bCB0aGluZ3MgdG8gY2hlY2tvdXQgaW4gdGhlIG91dHB1dCBvZiBgcHJlcCgpYC4KWW91IGNhbiBzZWU6CjEpIHRoZSBgc3RlcHNgIHRoYXQgd2VyZSBydW4gIAoyKSB0aGUgdmFyaWFibGUgaW5mbyAoYHZhcl9pbmZvYCkgIAozKSB0aGUgbW9kZWwgYHRlcm1faW5mb2AKNCkgdGhlIG5ldyBgbGV2ZWxzYCBvZiB0aGUgdmFyaWFibGVzIAo1KSB0aGUgb3JpZ2luYWwgbGV2ZWxzIG9mIHRoZSB2YXJpYWJsZXMgYG9yaWdfbHZsc2AgICAKNikgaW5mbyBhYm91dCB0aGUgdHJhaW5pbmcgZGF0YSBzZXQgc2l6ZSBhbmQgY29tcGxldGVuZXNzIChgdHJfaW5mb2ApCgpOb3RlOiAgWW91IG1heSBzZWUgdGhlIGBwcmVwLnJlY2lwZSgpYCBmdW5jdGlvbiBpbiBtYXRlcmlhbCB0aGF0IHlvdSByZWFkIGFib3V0IHRoZSBgcmVjaXBlc2AgcGFja2FnZS4gVGhpcyBpcyByZWZlcnJpbmcgdG8gdGhlIGBwcmVwKClgIGZ1bmN0aW9uIG9mIHRoZSBgcmVjaXBlc2AgcGFja2FnZS4KCiMjIyMgRXh0cmFjdGluZyB0aGUgcHJlcHJvY2Vzc2VkIHRyYWluaW5nIGRhdGEKCmBgYHtyLCBlY2hvPUZBTFNFLCBvdXQud2lkdGg9IjQwMHB4In0Ka25pdHI6OmluY2x1ZGVfZ3JhcGhpY3MoaGVyZTo6aGVyZSgiaW1nIiwicmVjaXBlczMucG5nIikpCmBgYAoKU2luY2Ugd2UgcmV0YWluZWQgb3VyIHByZXByb2Nlc3NlZCB0cmFpbmluZyBkYXRhLCB3ZSBjYW4gdGFrZSBhIGxvb2sgYXQgaXQgbGlrZSBieSB1c2luZyB0aGUgYGp1aWNlKClgIGZ1bmN0aW9uIG9mIHRoZSBgcmVjaXBlc2AgcGFja2FnZSBsaWtlIHRoaXM6CgojIyMjIHsuc2Nyb2xsYWJsZSB9CmBgYHtyfQojIFNjcm9sbCB0aGVyb3VnaCB0aGUgb3V0cHV0IQpwcmVwcGVkX3RyYWluPC0ganVpY2UocHJlcHBlZF9yZWMpCmdsaW1wc2UocHJlcHBlZF90cmFpbikKYGBgCiMjIyMKCioqTm90ZSoqOiAgUmVjYWxsIHRoYXQgeW91IG11c3Qgc3BlY2lmeSBgcmV0YWluID0gVFJVRWAgYXJndW1lbnQgb2YgdGhlIGBwcmVwKClgIGZ1bmN0aW9uIHRvIHVzZSBganVpY2UoKWAuCgojIyMjIEV4dHJhY3RpbmcgdGhlIHByZXByb2Nlc3NlZCB0ZXN0aW5nIGRhdGEKCmBgYHtyLCBlY2hvPUZBTFNFLCBvdXQud2lkdGg9IjQwMHB4In0Ka25pdHI6OmluY2x1ZGVfZ3JhcGhpY3MoaGVyZTo6aGVyZSgiaW1nIiwicmVjaXBlczQucG5nIikpCmBgYAoKTGF0ZXIgb24gaWYgeW91IHdhbnQgdG8gbG9vayBhdCB0aGUgcHJlcHJvY2Vzc2VkIHRlc3RpbmcgZGF0YSB5b3Ugd291bGQgdXNlIHRoZSBgYmFrZSgpYCBmdW5jdGlvbiBvZiB0aGUgYHJlY2lwZXNgIHBhY2thZ2UgbGlrZSB0aGlzOgoKSG93ZXZlciB5b3Ugd291bGQgd2FudCB0byBsZWF2ZSB5b3VyIHRlc3RpbmcgZGF0YSBhbG9uZSBhdCB0aGlzIHBvaW50LgoKIyMjIyB7LnNjcm9sbGFibGUgfQpgYGB7cn0KIyBTY3JvbGwgdGhlcm91Z2ggdGhlIG91dHB1dCEKYmFrZWRfcmVjIDwtIHJlY2lwZXM6OmJha2UocHJlcHBlZF9yZWMsIG5ld19kYXRhID0gdGVzdF9wbSkKZ2xpbXBzZShiYWtlZF9yZWMpCmBgYAojIyMjCgo+IGJha2UoKSB0YWtlcyBhIHRyYWluZWQgcmVjaXBlIGFuZCBhcHBsaWVzIHRoZSBvcGVyYXRpb25zIHRvIGEgZGF0YSBzZXQgdG8gY3JlYXRlIGEgZGVzaWduIG1hdHJpeC4KIGZvciBleGFtcGxlOiAgaXQgYXBwbGllcyB0aGUgY2VudGVyaW5nIHRvIG5ldyBkYXRhIHNldHMgdXNpbmcgdGhlc2UgbWVhbnMgdXNlZCB0byBjcmVhdGUgdGhlIHJlY2lwZQoKCk5vdGU6IGlmIHlvdSB1c2UgdGhlIHNraXAgb3B0aW9uIGZvciBzb21lIG9mIHRoZSBwcmVwcm9jZXNzaW5nIHN0ZXBzLCBiZSBjYXJlZnVsLiBganVpY2UoKWAgd2lsbCBzaG93IGFsbCBvZiB0aGUgcmVzdWx0cyBpZ25vcmluZyBgc2tpcCA9IFRSVUVgLiBgYmFrZSgpYCB3aWxsIG5vdCBuZWNlc3NhcmlseSBjb25kdWN0IHRoZXNlIHN0ZXBzIG9uIHRoZSBuZXcgZGF0YS4gCgoKCiMjIyBTcGVjaWZ5aW5nIHRoZSBNb2RlbAoKU28gZmFyIHdlIGhhdmUgdXNlZCBgcnNhbXBsZWAgdG8gc3BsaXQgdGhlIGRhdGEgYW5kIGByZWNpcGVzYCB0byBhc3NpZ24gdmFyaWFibGUgYW5kIHRvIHNwZWNpZnkgYW5kIHByZXAgb3VyIHByZXByb2Nlc3NpbmcgKGFzIHdlbGwgYXMgdG8gb3B0aW9uYWxseSBleHRyYWN0IHRoZSBwcmVwcm9jZXNzZWQgZGF0YSkuCgpXZSB3aWxsIG5vdyB1c2UgdGhlIGBwYXJzbmlwYCBwYWNrYWdlICh3aGljaCBpcyBzaW1pbGFyIHRvIHRoZSBwcmV2aW91cyBgY2FyZXRgIHBhY2thZ2UgLSBhbmQgaGVuY2Ugd2h5IGl0IGlzIG5hbWVkIGFmdGVyIHRoZSB2ZWdldGFibGUpIHRvIHNwZWNpZnkgb3VyIG1vZGVsLgoKV2UgYXJlIGdvaW5nIHRvIHN0YXJ0IHdpdGggYSBsaW5lYXIgcmVncmVzc2lvbiBidXQgd2Ugd2lsbCBkZW1vbnN0cmF0ZSBob3cgd2UgY2FuIHRyeSBkaWZmZXJlbnQgbW9kZWxzLgoKYGBge3J9ClBNX21vZGVsIDwtIHBhcnNuaXA6OmxpbmVhcl9yZWcoKSAjUE0gZm9yIHBhcnRpY3VsYXRlIG1hdGVyClBNX21vZGVsCmBgYAoKT0suIFNvIGZhciBhbGwgd2UgaGF2ZSB0b2xkIGBwYXJzbmlwYCBpcyB3ZSB3YW50IHRvIHVzZSBhIGxpbmVhciByZWdyZXNzaW9uLi4uICBMZXQncyB0ZWxsIGBwYXJzbmlwYCBtb3JlIGFib3V0IHdoYXQgd2Ugd2FudC4KCldlIHdvdWxkIGxpa2UgdG8gdXNlIHRoZSBvcmRpbmFyeSBsZWFzdCBzcXVhcmVzIG1ldGhvZCB0byBmaXQgb3VyIGxpbmVhciByZWdyZXNzaW9uLiBTbyB3ZSB3aWxsIHRlbGwgYHBhcm5zaXBgIHRoYXQgd2Ugd2FudCB0byB1c2UgdGhlIGBsbWAgcGFja2FnZSB0byBpbXBsZW1lbnQgb3VyIGxpbmVhciByZWdyZXNzaW9uICh0aGVyZSBhcmUgbWFueSBvcHRpb25zIGFjdHVhbGx5KS4gV2Ugd2lsbCBkbyBzbyBieSB1c2luZyB0aGUgYHNldF9lbmdpbmUoKWAgZnVuY3Rpb24gb2YgdGhlIGBwYXJzbmlwYCBwYWNrYWdlLgoKYGBge3J9CmxtX1BNX21vZGVsIDwtIAogIFBNX21vZGVsICAlPiUKICBwYXJzbmlwOjpzZXRfZW5naW5lKCJsbSIpCgpsbV9QTV9tb2RlbAoKYGBgCgoKIyMjIEZpdHRpbmcgdGhlIE1vZGVsCgpUbyBmaXQgb3VyIG1vZGVsIHdlIGNvdWxkIHVzZSBgcGFyc25pcGAgYW5kIHRoZW4gYXNzZXNzIG91ciBmaXQgdXNpbmcgdGhlIGB5YXJkc3RpY2tgIHBhY2thZ2UuCgpIb3dldmVyIGEgbmV3ZXIgcGFja2FnZSBjYWxsZWQgYHdvcmtmbG93c2AgYWxsb3dzIHVzIHRvIGtlZXAgdHJhY2sgb2YgYm90aCBvdXIgcHJlcHJvY2Vzc2luZyBzdGVwcyBhbmQgb3VyIG1vZGVsIHNwZWNpZmljYXRpb24uIEl0IGFsc28gYWxsb3dzIHVzIHRvIGltcGxlbWVudCBmYW5jaWVyIG9wdGltaXphdGlvbnMgaW4gYW4gYXV0b21hdGVkIHdheSwgc28gaXQgaXMgZ29vZCB0byBsZWFybiBhYm91dCBpdCEKClNvIHdlIHdpbGwgbm93IGNyZWF0ZSBhIHdvcmtmbG93IHdpdGggdGhlIHJlY2lwZSAob3VyIHByZXByb2Nlc3Npbmcgc3BlY2lmaWNhdGlvbnMpIHRoYXQgd2UgbWFkZSBhbmQgdGhlIG1vZGVsIHRoYXQgd2UganVzdCBzcGVjaWZpZWQuCgpGaXJzdCB3ZSB1c2UgdGhlIGB3b3JrZmxvdygpYCBmdW5jdGlvbiBvZiB0aGUgYHdvcmtmbG93c2AgcGFja2FnZSB0byBjcmVhdGUgYSB3b3JrZmxvdy4KClRoZW4gd2UgYWRkIG91ciByZWNpcGUgd2l0aCB0aGUgYGFkZF9yZWNpcGUoKWAgZnVuY3Rpb24gYW5kIHdlIGFkZCBvdXIgbW9kZWwgd2l0aCB0aGUgYGFkZF9tb2RlbCgpYCBmdW5jdGlvbiBvZiB0aGUgYHdvcmtmbG93c2AgcGFja2FnZS4gCgpOb3RlOiBXZSBkbyBub3QgbmVlZCB0byBhY3R1YWxseSBwcmVwIG91ciByZWNpcGUgYmVmb3JlIHVzaW5nIHdvcmtmbG93cyEKCmBgYHtyfQpQTV93ZmxvdyA8LXdvcmtmbG93czo6d29ya2Zsb3coKSAlPiUKICAgICAgICAgICB3b3JrZmxvd3M6OmFkZF9yZWNpcGUoc2ltcGxlX3JlYykgJT4lCiAgICAgICAgICAgd29ya2Zsb3dzOjphZGRfbW9kZWwobG1fUE1fbW9kZWwpClBNX3dmbG93CmBgYAoKQWgsIG5pY2UuIE5vdGljZSBob3cgaXQgdGVsbHMgdXMgYWJvdXQgYm90aCBvdXIgcHJlcHJvY2Vzc2luZyBzdGVwcyBhbmQgb3VyIG1vZGVsIHNwZWNpZmljYXRpb25zLgoKTm93IHdlIGNhbiBwcmVwYXJlIHRoZSByZWNpcGUgKGVzdGltYXRlIHRoZSBwYXJhbWV0ZXJzKSBhbmQgZml0IHRoZSBtb2RlbCB0byBvdXIgdHJhaW5pbmcgZGF0YSBhbGwgYXQgb25jZS4gUHJpbnRpbmcgdGhlIG91dHB1dCB3ZSBjYW4gc2VlIHRoZSBjb2VmZmljaWVudHMgb2YgdGhlIG1vZGVsLgoKYGBge3J9ClBNX3dmbG93X2ZpdCA8LSBmaXQoUE1fd2Zsb3csIGRhdGEgPSB0cmFpbl9wbSkKUE1fd2Zsb3dfZml0CmBgYAoKCgpMZXQncyByZXZpZXcgZXZlcnl0aGluZzoKCmBgYHtyLCBlY2hvPUZBTFNFLCBvdXQud2lkdGg9IjgwMHB4In0Ka25pdHI6OmluY2x1ZGVfZ3JhcGhpY3MoaGVyZTo6aGVyZSgiaW1nIiwidGlkeW1vZGVsc19lY29zeXN0ZW0ucG5nIikpCmBgYAoKCgoKPiBjaGVja19uZXdfdmFsdWVzOiBUaGlzIGNoZWNrIHdpbGwgYnJlYWsgdGhlIGJha2UgZnVuY3Rpb24gaWYgYW55IG9mIHRoZSBjaGVja2VkIGNvbHVtbnMgZG9lcyBjb250YWluIHZhbHVlcyBpdCBkaWQKbm90IGNvbnRhaW4gd2hlbiBwcmVwIHdhcyBjYWxsZWQgb24gdGhlIHJlY2lwZS4gSWYgdGhlIGNoZWNrIHBhc3Nlcywgbm90aGluZyBpcyBjaGFuZ2VkIHRvIHRoZSBkYXRhCgo+IGNoZWNrX3JhbmdlIGNyZWF0ZXMgYSBzcGVjaWZpY2F0aW9uIG9mIGEgcmVjaXBlIGNoZWNrIHRoYXQgd2lsbCBjaGVjayBpZiB0aGUgcmFuZ2Ugb2YgYSBudW1lcmljCnZhcmlhYmxlIGNoYW5nZWQgaW4gdGhlIG5ldyBkYXRhLgoKCgpbcGFyYW1ldGVyIHZzIGh5cGVycGFyYW1ldGVyXShodHRwczovL3d3dy5kYXRhY2FtcC5jb20vY29tbXVuaXR5L3R1dG9yaWFscy9wYXJhbWV0ZXItb3B0aW1pemF0aW9uLW1hY2hpbmUtbGVhcm5pbmctbW9kZWxzKXt0YXJnZXQ9Il9ibGFuayJ9CgoKCnByZXBwZXIgZm9yIGNyb3NzIHZhbGlkYXRpb24/CgoKRnJvbSBCcm9vbToKCmFsbG93cyBmb3IgYW4gZWFzeS90aWR5IHdheSB0byBsb29rIGF0IHRoZSBmaXR0ZWQgbW9kZWwKdGlkeSgpIGdyYWJzIHRoZSBjb2VmZmljaWVudHMgZnJvbSB0aGUgbW9kZWwKZ2xhbmNlKCkgc3VtbWFyaXplcyB0aGUgbW9kZWwgZml0CmF1Z21lbnQoKSBnaXZlcyAxNTAgcm93IG9ic2VydmF0aW9uIGxldmVsIHN1bW1hcnkKCgoKZ3JlYXQgYmxvZyBhYm91dCBjcm9zcyB2YWxpZGF0aW9uIGV0YyBodHRwczovL3Rvd2FyZHNkYXRhc2NpZW5jZS5jb20vdHJhaW4tdGVzdC1zcGxpdC1hbmQtY3Jvc3MtdmFsaWRhdGlvbi1pbi1weXRob24tODBiNjFiZWNhNGI2CgojIyBEYXRhIFZpc3VhbGl6YXRpb24KCiMjIFN1bW1hcnkKCldlIGhhdmUgZXZhbHVhdGVkIGF2ZXJhZ2UgY29uc3VtcHRpb24gZXN0aW1hdGVzIG9mIDE1IGRpZXRhcnkgZmFjdG9ycyB3aXRoIHByb2JhYmx5IG5vbi1jb21tdW5pY2FibGUgZGlzZWFzZSAoTkNEKSByaXNrIGZyb20gMTk1IGRpZmZlcmVudCBjb3VudHJpZXMgYXJvdW5kIHRoZSB3b3JsZC4gVG8gZG8gc28gd2UgaW1wb3J0ZWQgZGF0YSBmcm9tIGEgUERGIHVzaW5nIHRoZSBgcGRmdG9vbHNgIHBhY2thZ2UsIGFzIHdlbGwgYXMgZGF0YSBmcm9tIHR3byBDU1YgZmlsZXMgdXNpbmcgcmVhZHIuIFdlIHVzZWQgYHRpZHl2ZXJzZWAgcGFja2FnZXMgc3VjaCBhcyBgZHBseXJgLCBgc3RyaW5ncmAsIGFuZCBgdGlkeWAgdG8gY2xlYW4gYW5kIGpvaW4gdGhlIGRhdGEgZnJvbSB0aGUgUERGIHdpdGggdGhlIENTViBmaWxlcy4gCgpXZSBsZWFybmVkIHRoYXQgUmVncmVzc2lvbiBpcyBhIHBvd2VyZnVsIGFuZCBmbGV4aWJsZSBzdGF0aXN0aWNhbCB0b29sIHRoYXQgc2ltcGxpZmllcyBvciBlc3RpbWF0ZXMgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB2YXJpYWJsZXMgdXNpbmcgYSBtYXRoZW1hdGljYWwgbW9kZWwuIFdlIGxlYXJuZWQgYWJvdXQgdGhlIHV0aWxpdHkgb2YgdGhlIHJlZ3Jlc3Npb24gdG8gY29tcGFyZSBncm91cHMsIGxvb2sgZm9yIGFzc29jaWF0aW9ucyBiZXR3ZWVuIHZhcmlhYmxlcywgYW5kIHRvIHByZWRpY3Qgb3V0Y29tZXMgYmFzZWQgb24gbXVsdGlwbGUgcHJlZGljdG9yIG9yIGV4cGxhbmF0b3J5IHZhcmlhYmxlcy4gV2UgdGhlbiBjb21wYXJlZCB0aGlzIHRvIG90aGVyIHBvcHVsYXIgdGVzdHMgbGlrZSB0aGUgJHQkLXRlc3QgYW5kIHRoZSBBTk9WQS4gV2UgbGVhcm5lZCB0aGF0IHRoZXNlIHRlc3RzIGFyZSBhY3R1YWxseSBlcXVpdmFsZW50IHRvIHNwZWNpYWxpemVkIHR5cGVzIG9mIHJlZ3Jlc3Npb25zLgoKT3VyIHN0YXRpc3RpY2FsIGFuYWx5c2lzIGZvY3VzZWQgb24gZXZhbHVhdGluZyBkaWZmZXJlbmNlcyBpbiB0aGUgY29uc3VtcHRpb24gb2YgcmVkIG1lYXQgYXJvdW5kIHRoZSB3b3JsZCBiZXR3ZWVuIGZlbWFsZXMgYW5kIG1hbGVzIGFuZCBhY3Jvc3MgZGlmZmVyZW50IGFnZSBncm91cHMuIEZpcnN0IHdlIGxvb2tlZCBhdCB0aGUgYXNzdW1wdGlvbnMgb2YgWyR0JC10ZXN0c10oaHR0cHM6Ly9zdGF0dHJlay5jb20vc3RhdGlzdGljcy9kaWN0aW9uYXJ5LmFzcHg/ZGVmaW5pdGlvbj10d28tc2FtcGxlJTIwJHQkLXRlc3Qpe3RhcmdldD0iX2JsYW5rIn0gYW5kIHJlZ3Jlc3Npb25zLCBhbmQgZGV0ZXJtaW5lZCB0aGF0IHRoZSByZWxhdGl2ZSBwZXJjZW50YWdlIGRhdGEgb2YgcmVkIG1lYXQgY29uc3VtcHRpb24gdG8gdGhlIG9wdGltYWwgZ3VpZGVsaW5lIHN1Z2dlc3RlZCBhbW91bnQgd2FzIHJpZ2h0IHNrZXdlZC4gV2UgbGVhcm5lZCB0aGF0IHdlIGNvdWxkIHRyYW5zZm9ybSB0aGUgZGF0YSBieSB0YWtpbmcgdGhlIGxvZyBvZiB0aGVzZSB2YWx1ZXMgdG8gYWNoaWV2ZSBtb3JlIG5vcm1hbGx5IGRpc3RyaWJ1dGVkIGRhdGEuIFRvIGNvbXBhcmUgbWFsZXMgYW5kIGZlbWFsZXMgd2UgdXNlZCBhICR0JC10ZXN0IGFuZCBsZWFybmVkIHRoYXQgYSAkdCQtdGVzdCBpcyBhIHNwZWNpYWxpemVkIGZvcm0gb2YgYSBsaW5lYXIgcmVncmVzc2lvbi4gVG8gY29tcGFyZSB0aGUgMTUgZGlmZmVyZW50IGFnZSBncm91cHMgd2UgdXNlZCBhbiBBTk9WQSBhbmQgbGVhcm5lZCB0aGF0IHRoZSBBTk9WQSBpcyBhbHNvIGEgc3BlY2lhbGl6ZWQgZm9ybSBvZiBsaW5lYXIgcmVncmVzc2lvbi4gV2UgZXhhbWluZWQgaG93IHdlIG9idGFpbmVkIHRoZSBzYW1lIHJlc3VsdHMgdXNpbmcgZWl0aGVyIHN0YXRpc3RpY2FsIHRlc3QuIFRoaXMgd2FzIGFsc28gdGhlIGNhc2UgaWYgd2UgbG9va2VkIGF0IHRoZSBlZmZlY3Qgb2YgZ2VuZGVyIGFuZCBjb250cm9sbGVkIGZvciB0aGUgcGFpcmVkIGNvdW50cnkgc3RydWN0dXJlIGluIHRoZSBkYXRhIGJ5IGVpdGhlciBpbmNsdWRpbmcgYGxvY2F0aW9uX25hbWVgIGluIHRoZSBtb2RlbCBhcyBhbm90aGVyIHRlcm0gb3IgYnkgdXNpbmcgYSBtaXhlZCBlZmZlY3RzIG1vZGVsIHRvIGNvbnRyb2wgZm9yIHRoaXMgc3RydWN0dXJlIGFzIGEgcmFuZG9tIGVmZmVjdCBidXQgbm90IHNwZWNpZmljYWxseSB0ZXN0IGZvciB0aGUgaW5mbHVlbmNlIG9mIGBsb2NhdGlvbl9uYW1lYCBvbiByZWQgbWVhdCBjb25zdW1wdGlvbiBlc3RpbWF0ZXMuIFdlIGxlYXJuZWQgdGhhdCBmaXhlZCBlZmZlY3RzIGFyZSB0aG9zZSB0aGF0IHdlIHdpc2ggdG8gZXZhbHVhdGUsIHdoaWxlIHJhbmRvbSBlZmZlY3RzIGFyZSB0aG9zZSB0aGF0IG1heSBpbmZsdWVuY2UgdGhlIHJlbGF0aW9uc2hpcHMgb2Ygb3VyIHZhcmlhYmxlcyBvZiBpbnRlcmVzdCBidXQgdGhhdCB3ZSBkbyBub3Qgd2lzaCB0byBhY3RpdmVseSBldmFsdWF0ZS4gVXNpbmcgdGhlc2UgdGVzdHMgYW5kIG1vZGVscywgd2UgZGV0ZXJtaW5lZCB0aGF0IG1hbGVzIGNvbnN1bWUgbW9yZSByZWQgbWVhdCB0aGFuIHdvbWVuIG9uIGF2ZXJhZ2UgYXJvdW5kIHRoZSB3b3JsZC4gCgpPdXIgQU5PVkEgYW5hbHlzaXMgb2YgYWdlIGRldGVybWluZWQgdGhhdCBpbmRlZWQgdGhlcmUgYXQgbGVhc3Qgb25lIGFnZSBncm91cCBjb25zdW1lZCBhIHNpZ25pZmljYW50bHkgZGlmZmVyZW50IGFtb3VudCBvZiByZWQgbWVhdCBjb21wYXJlZCB0byB0aGUgb3RoZXIgYWdlIGdyb3VwcywgYW5kIHRoaXMgd2FzIHN0aWxsIHRoZSBjYXNlIHdoZW4gd2UgY29udHJvbGxlZCBgbG9jYXRpb25fbmFtZWAuIEhvd2V2ZXIsIHdlIGxlYXJuZWQgdGhhdCB3ZSBjb3VsZCB0aGF0IHRoZSBBTk9WQSBkb2VzIG5vdCBwcm92aWRlIGluZm9ybWF0aW9uIGFib3V0IHdoaWNoIGFnZSBncm91cHMgYXJlIGRpZmZlcmVudC4gV2UgbGVhcm5lZCBob3cgdGhlIHJlZ3Jlc3Npb24gaG93ZXZlciBjb3VsZCBwcm92aWRlIHNvbWUgY29tcGFyaXNvbnMgb2YgZGlmZmVyZW50IGFnZSBncm91cHMgcmVsYXRpdmUgdG8gdGhlIHJlZmVyZW5jZSBhZ2UgZ3JvdXAuIEZ1cnRoZXJtb3JlLCBvdXIgZGF0YSB2aXN1YWxpemF0aW9ucyBhbGxvd2VkIHVzIHRvIGRldGVybWluZSB0aGF0IGluIGdlbmVyYWwgcmVkIG1ldCBjb25zdW1wdGlvbiBhcHBlYXJzIHRvIGJlIGhpZ2hlciBpbiB0aGUgeW91bmdlciBhZ2UgZ3JvdXBzIHJlbGF0aXZlIHRvIHRoZSBvbGRlciBhZ2UgZ3JvdXBzLiAKCkZpbmFsbHksIHdlIGFsc28gbG9va2VkIGF0IGRpZmZlcmVuY2VzIGluIHJlZCBtZWF0IGNvbnN1bXB0aW9uIGJldHdlZW4gdGhlIGRpZmZlcmVudCBjb3VudHJpZXMgYW5kIHNhdyBpbiBvdXIgQU5PVkEgYW5hbHlzaXMgYW5kIG91ciByZWdyZXNzaW9uIGFuYWx5c2lzIHRoYXQgdGhlcmUgd2VyZSBzaWduaWZpY2FudCBkaWZmZXJlbmNlcy4gV2Ugd2VyZSBhYmxlIHRvIHVzZSBhIHJlZ3Jlc3Npb24gdGhhdCBpbmNsdWRlZCBgc2V4YCwgYGFnZV9ncm91cF9uYW1lYCwgYW5kIGBsb2NhdGlvbl9uYW1lYCB0byBldmFsdWF0ZSB0aGUgaW5mbHVlbmNlIG9mIGVhY2ggb2YgdGhlIHRocmVlIGRlbW9ncmFwaGljIGZhY3RvcnMgb24gY29uc3VtcHRpb24gd2hpbGUgY29udHJvbGxpbmcgb3IgYWNjb3VudGluZyBmb3IgdGhlIG90aGVyIHR3by4gT3VyIHJlc3VsdHMgZGVtb25zdHJhdGVkIHRoYXQgYWxsIHRocmVlIGluZmx1ZW5jZWQgb3Igd2VyZSBhc3NvY2lhdGVkIHdpdGggcmVkIG1lYXQgY29uc3VtcHRpb24uCgpJbiBwcmVmb3JtaW5nIG91ciBzdGF0aXN0aWNhbCBhbmFseXNlcyB3ZSBsZWFybmVkIGFib3V0IHRoZSBhc3N1bXB0aW9ucyBvZiB0aGUgJHQkLXRlc3QsIHRoZSByZWdyZXNzaW9uLCBhbmQgdGhlIEFOT1ZBLiBXZSBhbHNvIGxlYXJuZWQgYWJvdXQgaW1wb3J0YW50IG1ldGhvZHMgdG8gdGVzdHMgdGhlc2UgYXNzdW1wdGlvbnMuCgojIyMjICR0JC10ZXN0IGFzc3VtcHRpb25zOgoKMSkgTm9ybWFsaXR5IG9mIHRoZSBkYXRhIGZvciBib3RoIGdyb3VwcyAodGhpcyBpcyBub3QgYXMgbXVjaCBvZiBhbiBpc3N1ZSBpZiB0aGUgbnVtYmVyIG9mIG9ic2VydmF0aW9ucyBpcyByZWxhdGl2ZWx5IGxhcmdlIHRvdGFsIG4+MzAgLSBjYW4gZXZhbHVhdGUgYnkgcGxvdHRpbmcgdGhlIGRpc3RyaWJ1dGlvbiBhbmQgYnkgY3JlYXRpbmcgW1EtUSBwbG90c10oW1EtUSBQbG90c10oaHR0cDovL29ubGluZXN0YXRib29rLmNvbS8yL2FkdmFuY2VkX2dyYXBocy9xLXFfcGxvdHMuaHRtbCl7dGFyZ2V0PSJfYmxhbmsifSkpCjIpIEVxdWFsIHZhcmlhbmNlIGJldHdlZW4gdGhlIHR3byBncm91cHMgKG1ha2Ugc3VyZSB5b3UgZG8gdGhlIGNvcnJlY3QgdGVzdCBpZiB0aGUgZGF0YSBpcyBub3Qgbm9ybWFsKQozKSBCYWxhbmNlZCBzYW1wbGUgc2l6ZXMgb2YgdGhlIHR3byBncm91cHMKNCkgSW5kZXBlbmRlbnQgb2JzZXJ2YXRpb25zIChvciBpbmRlcGVuZGVudCBwYWlyZWQgb2JzZXJ2YXRpb25zKQoKV2UgY2FuIGV2YWx1YXRlIGlmIG91ciBkYXRhIGlzIFtub3JtYWxseSBkaXN0cmlidXRlZF0oaHR0cHM6Ly93d3cucGh5c2lvbG9neS5vcmcvZG9pL2Z1bGwvMTAuMTE1Mi9hZHZhbi4wMDA2NC4yMDE3KXt0YXJnZXQ9Il9ibGFuayJ9IGJ5IHBsb3R0aW5nIHRoZSBkaXN0cmlidXRpb24gYW5kIGJ5IGNyZWF0aW5nIFtRLVEgcGxvdHNdKFtRLVEgUGxvdHNdKGh0dHA6Ly9vbmxpbmVzdGF0Ym9vay5jb20vMi9hZHZhbmNlZF9ncmFwaHMvcS1xX3Bsb3RzLmh0bWwpe3RhcmdldD0iX2JsYW5rIn0gdG8gY29tcGFyZSB0aGUgZGlzdHJpYnV0aW9uIG9mIG91ciBkYXRhIHRvIHRoZSB0aGVvcmV0aWNhbCBbbm9ybWFsIGRpc3RyaWJ1dGlvbl0oaHR0cHM6Ly93d3cucGh5c2lvbG9neS5vcmcvZG9pL2Z1bGwvMTAuMTE1Mi9hZHZhbi4wMDA2NC4yMDE3KXt0YXJnZXQ9Il9ibGFuayJ9LgoKPHU+SWYgb3VyIGRhdGEgaXMgbm90IG5vcm1hbGx5IGRpc3RyaWJ1dGVkLCB3ZSBjYW4gY29uc2lkZXIgdGhlc2Ugb3B0aW9uczo8L3U+CgoxKSBXZSBjYW4gc3RpbGwgcGVyZm9ybSBhICR0JC10ZXN0IGlmIG91ciBuIGlzIGxhcmdlCjIpIFdlIGNhbiB0cmFuc2Zvcm0gdGhlIGRhdGEgYmVmb3JlIHBlcmZvcm1pbmcgYSAkdCQtdGVzdAozKSBXZSBjYW4gdXNlIGEgbm9ucGFyYW1ldHJpYyB0ZXN0IChXaWxjb3hvbiBzaWduZWQgcmFuayB0ZXN0LCB0aGUgV2lsY294b24gcmFuayBzdW0gdGVzdCwgYW5kIHRoZSBUd28tc2FtcGxlIEtvbG1vZ29yb3YtU21pcm5vdiAoS1MpIHRlc3QpCjQpIFdlIGNhbiBwZXJmb3JtIGEgJHQkLXRlc3Qgd2l0aCByZXNhbXBsaW5nIG1ldGhvZHMgKHdoaWNoIHNob3VsZCBiZSBlc3BlY2lhbGx5IGNvbnNpZGVyZWQgd2hlbiB0aGUgZ3JvdXBzIGFyZSBpbWJhbGFuY2VkKQoKU2VlIHRoaXMgW2Nhc2Ugc3R1ZHldKGh0dHBzOi8vb3BlbmNhc2VzdHVkaWVzLmdpdGh1Yi5pby9vY3MtYnAtcnVyYWwtYW5kLXVyYmFuLW9iZXNpdHkpe3RhcmdldD0iX2JsYW5rIn0gZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gJHQkLXRlc3QgYXNzdW1wdGlvbnMuCgpXZSBsZWFybmVkIHRoYXQgd2UgY2FuIHRlc3QgaWYgMiBncm91cHMgaGF2ZSBlcXVhbCB2YXJpYW5jZSB1c2luZzogIAoxKSB0aGUgRiB0ZXN0IHdpdGggYHZhci50ZXN0KClgICAKMikgTW9vZCdzIHRlc3QgdXNpbmcgW2Btb29kLnRlc3QoKWBdKGh0dHBzOi8vZmlsZXMuZXJpYy5lZC5nb3YvZnVsbHRleHQvRUQwNjU1NTkucGRmKSAodXNlIGlmIHRoZSBkYXRhIGlzIG5vdCBub3JtYWxseSBkaXN0cmlidXRlZCkgIAoKIyMjIyBMaW5lYXIgcmVncmVzc2lvbiBhc3N1bXB0aW9uczoKCkwgKGxpbmVhcikgLSBUaGVyZSBpcyBhIGxpbmVhciByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgdmFyaWFibGVzLiAgCkkgKGluZGVwZW5kZW50KSAtIFRoZSBzYW1wbGVzIGFyZSBpbmRlcGVuZGVudCBmcm9tIG9uZSBhbm90aGVyLiAgCk4gKG5vcm1hbCkgLSBUaGUgcmVzaWR1YWxzIGFyZSBub3JtYWxseSBkaXN0cmlidXRlZC4gIApFIChlcXVhbCB2YXJpYW5jZXMpIC0gVGhlIHZhcmlhbmNlIG9mIHRoZSByZXNpZHVhbHMgb2YgdGhlIGdyb3VwcyBpcyBzaW1pbGFyLiAgIApJdCBpcyBhbHNvIGltcG9ydGFudCB0aGF0IHByZWRpY3RvciB2YXJpYWJsZXMgYXJlIG5vdCBjb3JyZWxhdGVkIHdpdGggb25lIGFub3RoZXIuICAKCiMjIyMgQU5PVkEgYXNzdW1wdGlvbnM6CgoxKSBOb3JtYWxpdHkgb2YgdGhlIGRhdGEgZm9yIGFsbCB0ZXN0ZWQgZ3JvdXBzIChsZXNzIG9mIGFuIGlzc3VlIGlmIHRoZSBudW1iZXIgb2Ygb2JzZXJ2YXRpb25zIGlzIHJlbGF0aXZlbHkgbGFyZ2UgdG90YWwgbj4zMCkgCjIpIEVxdWFsIHZhcmlhbmNlIGJldHdlZW4gdGhlIGdyb3VwcyAtIGFrYSBIb21vZ2VuZWl0eSBvZiB2YXJpYW5jZSAobWFrZSBzdXJlIHlvdSBkbyB0aGUgY29ycmVjdCB0ZXN0IGlmIHRoZSBkYXRhIGlzIG5vdCBub3JtYWwpIAozKSBCYWxhbmNlZCBzYW1wbGUgc2l6ZXMgb2YgdGhlIGdyb3VwcyAKNCkgSW5kZXBlbmRlbnQgb2JzZXJ2YXRpb25zIChvciBpbmRlcGVuZGVudCBwYWlyZWQgb2JzZXJ2YXRpb25zKSAKCldlIGxlYXJuZWQgYWJvdXQgdGhyZWUgdGVzdHMgZm9yIGV4YW1pbmluZyB0aGUgZXF1YWxpdHkgb2YgdmFyaWFuY2Ugb2YgMyBvciBtb3JlIGdyb3VwczoKMSkgW0JhcnRsZXR0J3MgdGVzdF0oaHR0cHM6Ly93d3cuaXRsLm5pc3QuZ292L2Rpdjg5OC9oYW5kYm9vay9lZGEvc2VjdGlvbjMvZWRhMzU3Lmh0bSl7dGFyZ2V0PSJfYmxhbmsifSAod29ya3Mgd2VsbCBpZiB0aGUgZGF0YSBhcHBlYXJzIHRvIGJlIG5vcm1hbGx5IGRpc3RyaWJ1dGVkKSAKMikgW0ZsaWduZXItS2lsbGVlbl0oaHR0cDovL3dpa2kuc3RhdC51Y2xhLmVkdS9zb2NyL2luZGV4LnBocC9BUF9TdGF0aXN0aWNzX0N1cnJpY3VsdW1fMjAwN19Ob25QYXJhbV9WYXJJbmRlcCl7dGFyZ2V0PSJfYmxhbmsifSB0ZXN0IGlzIG5vbnBhcmFtZXRyaWMgYW5kIGRvZXMgbm90IGFzc3VtZSBub3JtYWxpdHkgCjMpIFtMZXZlbmUncyB0ZXN0XShodHRwczovL3d3dy5pdGwubmlzdC5nb3YvZGl2ODk4L2hhbmRib29rL2VkYS9zZWN0aW9uMy9lZGEzNWEuaHRtKXt0YXJnZXQ9Il9ibGFuayJ9LCBpcyBtb3JlIHJvYnVzdCB0byB2aW9sYXRpb25zIG9mIG5vcm1hbGl0eSB0aGFuIHRoZSBCYXJ0bGV0dCdzIHRlc3QsIGJ1dCBub3QgYXMgcm9idXN0IGFzIHRoZSBGbGlnbmVyLSBLaWxsZWVuIHRlc3QgCgoKVXNpbmcgdGhlIGBnZ3Bsb3QyYCBwYWNrYWdlIHdlIHdlcmUgYWJsZSB0byB2aXN1YWxpemUgdHJlbmRzIGluIHRoZSBkYXRhIGFuZCB0byBjb21wYXJlIGNvbnN1bXB0aW9uIG9mIHRoZXNlIGRpZXRhcnkgZmFjdG9ycyBpbiB0aGUgVVMgd2l0aCB0aGF0IG9mIHRoZSBvdGhlciBjb3VudHJpZXMuCldlIHNlZSB0aGF0IHRoZSBwb3B1bGF0aW9ucyBpbiBtYW55IGNvdW50cmllcyBhcmUgb3Zlci1jb25zdW1pbmcgZm9vZHMgdGhhdCBhcmUgYXNzb2NpYXRlZCB3aXRoIGhlYWx0aCByaXNrIHdoZW4gb3Zlci1jb25zdW1lZC4gSW4gcGFydGljdWxhciBwcm9jZXNzZWQgbWVhdCBhbmQgc3VnYXItc3dlZXRlbmVkIGJldmVyYWdlcyBhcHBlYXIgdG8gYmUgdGhlIG1vc3Qgb3ZlciBjb25zdW1lZC4gSW1wb3J0YW50bHkgYm90aCBvZiB0aGVzZSBhcHBlYXIgdG8gYmUgY29uc3VtZWQgYXQgaGlnaGVyIHF1YW50aXRpZXMgYnkgbWFsZXMgYW5kIHlvdW5nZXIgYWR1bHRzLiBQZW9wbGUgaW4gdGhlIFVTICBhcHBlYXIgdG8gY29uc3VtZSBsZXNzIHN1Z2FyLXN3ZWV0ZW5lZCBiZXZlcmFnZXMgdGhhbiBvdGhlciBjb3VudHJpZXMsIGhvd2V2ZXIsIHBlb3BsZSBhcmUgc3RpbGwgb3Zlci1jb25zdW1pbmcuIFByb2Nlc3NlZCBtZWF0IGhvd2V2ZXIgYXBwZWFycyB0byBiZSBlc3BlY2lhbGx5IGJhZCBpbiB0aGUgVVMuIEluIHRlcm1zIG9mIGZvb2QgdGhhdCBuZWVkIHRvIGJlIGNvbnN1bWVkIGluIGFkZXF1YXRlIGFtb3VudHMgdG8gb3ZlcmNvbWUgaGVhbHRoIHJpc2ssIG5lYXJseSBhbGwgY291bnRyaWVzIGZvciBhbGwgZmFjdG9ycyBhcmUgbm90IHJlYWNoaW5nIGd1aWRlbGluZSBsZXZlbHMuIEhvd2V2ZXIsIHRoZXJlIGFyZSBzb21lIGNvdW50cmllcyBjb25zdW1pbmcgbW9yZSB0aGFuIGFkZXF1YXRlIGFtb3VudHMgb2YgbGVndW1lcywgdmVnZXRhYmxlcywgZnJ1aXRzIGFuZCBmaWJlci4gUGVvcGxlIGluIHRoZSBVUyBhcHBlYXIgdG8gZWF0IG1vcmUgbWlsayBwcm9kdWN0cyBhbmQgY29uc3VtZSBtb3JlIG9tZWdhLTMgZmF0dHkgYWNpZCBhbmQgY2FsY2l1bSByaWNoIGZvb2RzIHRoYW4gb3RoZXIgY291bnRyaWVzLiBBbGwgY291bnRyaWVzIGluY2x1ZGluZyB0aGUgVVMgY29uc3VtZSB2ZXJ5IGxvdyBsZXZlbHMgb2YgcG9seXVuc2F0dXJhdGVkIGZhdHR5IGFjaWRzLiBUaGVzZSBbcG9seXVuc2F0dXJhdGVkIGZhdHR5IGFjaWRzXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Qb2x5dW5zYXR1cmF0ZWRfZmF0KSBhcmUgYWJ1bmRhbnQgaW4gc2VlZHMsIG51dHMsIGF2b2NhZG9zLCBhcyB3ZWxsIGFzIGZpc2guIExpa2VseSB0aGUgbG93IGxldmVsIG9mIGNvbnN1bXB0aW9uIG9mIG51dHMgYW5kIHNlZWRzIGNvbnRyaWJ1dGVzIHRvIHRoZXNlIGxvdyBwb2x5dW5zYXR1cmF0ZWQgZmF0dHkgYWNpZCBlc3RpbWF0ZXMuIFRoZSBzdXBwbGVtZW50YXJ5IHRhYmxlIGluY2x1ZGVkIGluIHRoZSBhcnRpY2xlIHN1Z2dlc3RzIHRoYXQgcG9vciBjb25zdW1wdGlvbiBvZiBwb2x5dW5zYXR1cmF0ZWQgZmF0dHkgYWNpZHMgaXMgYXNzb2NpYXRlZCB3aXRoIGlzY2hlbWljIGhlYXJ0IGRpc2Vhc2UuIFRoZSBhcnRpY2xlIHRha2VzIHRoaXMgZGF0YSBmdXJ0aGVyIHRvIGV2YWx1YXRlIHRoZSBhc3NvY2lhdGlvbiBvZiBjb25zdW1wdGlvbiBsZXZlbHMgb2YgdGhlc2UgZm9vZHMgd2l0aCBtb3J0YWxpdHkuCgpBbmFseXNlcyBsaWtlIHRoZSBvbmUgaW4gb3VyIGNhc2Ugc3R1ZHkgYXJlIGltcG9ydGFudCBmb3IgZGVmaW5pbmcgd2hpY2ggZ3JvdXBzIGNvdWxkIGJlbmVmaXQgdGhlIG1vc3QgZnJvbSBpbnRlcnZlbnRpb25zLCBlZHVjYXRpb24sIGFuZCBwb2xpY3kgY2hhbmdlcyB3aGVuIGF0dGVtcHRpbmcgdG8gbWl0aWdhdGUgcHVibGljIGhlYWx0aCBjaGFsbGVuZ2VzLiBZb3UgY2FuIHNlZSBpbiB0aGUgW2FydGljbGVdKGh0dHBzOi8vd3d3LnRoZWxhbmNldC5jb20vYWN0aW9uL3Nob3dQZGY/cGlpPVMwMTQwLTY3MzYlMjgxOSUyOTMwMDQxLTgpe3RhcmdldD0iX2JsYW5rIn0gaG93ZXZlciB0aGF0IG1hbnkgYWRkaXRpb25hbCBjb25zaWRlcmF0aW9ucyB3b3VsZCBiZSBpbnZvbHZlZCB0byBwZXJmb3JtIGEgbW9yZSB0aG9yb3VnaCBhbmFseXNpcyB0byBhZGVxdWF0ZWx5IHVuZGVyc3RhbmQgdGhlIGRhdGEgZW5vdWdoIHRvIHJlY29tbWVuZCBwb2xpY3kgY2hhbmdlcy4KCgojIyMgU3VnZ2VzdGVkIEhvbWV3b3JrCgpTdHVkZW50cyBjYW4gZXZhbHVhdGUgY29uc3VtcHRpb24gZXN0aW1hdGVzIG9mIGFub3RoZXIgZGlldGFyeSBmYWN0b3IgYmVzaWRlcyByZWQgbWVhdC4KCiMjIyBIZWxwZnVsIExpbmtzCgpyZXZpZXcgb2YgW3RpZHltb2RlbHNdKGh0dHBzOi8vcnZpZXdzLnJzdHVkaW8uY29tLzIwMTkvMDYvMTkvYS1nZW50bGUtaW50cm8tdG8tdGlkeW1vZGVscy8pe3RhcmdldD0iX2JsYW5rIn0gCgpndWlkZSBmb3IgW3ByZXByb2Nlc3Npbmcgd2l0aCByZWNpcGVzXShodHRwOi8vd3d3LnJlYmVjY2FiYXJ0ZXIuY29tL2Jsb2cvMjAxOS0wNi0wNl9wcmVfcHJvY2Vzc2luZy8pCgpbZ3VpZGVdKGh0dHBzOi8vYnJpYXR0ZS5naXRodWIuaW8vZ2djb3JyLykgZm9yIHVzaW5nIEdHYWxseSB0byBjcmVhdGUgY29ycmVsYXRpb24gcGxvdHMKW2d1aWRlXShodHRwczovL3d3dy50aWR5dmVyc2Uub3JnL2Jsb2cvMjAxOC8xMS9wYXJzbmlwLTAtMC0xLykgZm9yIHVzaW5nIHBhcnNuaXAgdG8gdHJ5IGRpZmZlcmVudCBhbGdvcml0aG1zIG9yIGVuZ2luZXMKW3JlY2lwZSBmdW5jdGlvbnNdKGh0dHBzOi8vdGlkeW1vZGVscy5naXRodWIuaW8vcmVjaXBlcy9yZWZlcmVuY2UvaW5kZXguaHRtbCkKCjx1PlRlcm1zIGFuZCBjb25jZXB0cyBjb3ZlcmVkOjwvdT4gIAoKW1RpZHl2ZXJzZV0oaHR0cHM6Ly93d3cudGlkeXZlcnNlLm9yZy8pe3RhcmdldD0iX2JsYW5rIn0gIApbUlN0dWRpbyBjaGVhdHNoZWV0c10oaHR0cHM6Ly9yc3R1ZGlvLmNvbS9yZXNvdXJjZXMvY2hlYXRzaGVldHMvKXt0YXJnZXQ9Il9ibGFuayJ9ICAKW0luZmVyZW5jZV0oaHR0cHM6Ly93d3cuYnJpdGFubmljYS5jb20vc2NpZW5jZS9pbmZlcmVuY2Utc3RhdGlzdGljcyl7dGFyZ2V0PSJfYmxhbmsifSAgCltSZWdyZXNzaW9uXShodHRwczovL2xpbmRlbG9ldi5naXRodWIuaW8vdGVzdHMtYXMtbGluZWFyLyl7dGFyZ2V0PSJfYmxhbmsifSAgCltEaWZmZXJlbnQgdHlwZXMgb2YgcmVncmVzc2lvbl0oaHR0cHM6Ly93d3cuYW5hbHl0aWNzdmlkaHlhLmNvbS9ibG9nLzIwMTUvMDgvY29tcHJlaGVuc2l2ZS1ndWlkZS1yZWdyZXNzaW9uLyl7dGFyZ2V0PSJfYmxhbmsifSAgCltPcmRpbmFyeSBsZWFzdCBzcXVhcmVzIG1ldGhvZF0oaHR0cDovL3NldG9zYS5pby9ldi9vcmRpbmFyeS1sZWFzdC1zcXVhcmVzLXJlZ3Jlc3Npb24vKXt0YXJnZXQ9Il9ibGFuayJ9ICAKW1Jlc2lkdWFsXShodHRwczovL3d3dy5zdGF0aXN0aWNzaG93dG8uZGF0YXNjaWVuY2VjZW50cmFsLmNvbS9yZXNpZHVhbC8pe3RhcmdldD0iX2JsYW5rIn0gIAoKPHU+UGFja2FnZXMgdXNlZCBpbiB0aGlzIGNhc2Ugc3R1ZHk6IDwvdT4KCiBQYWNrYWdlICAgfCBVc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0tLS0tLS0tLS0gfC0tLS0tLS0tLS0tLS0KW2hlcmVdKGh0dHBzOi8vZ2l0aHViLmNvbS9qZW5ueWJjL2hlcmVfaGVyZSl7dGFyZ2V0PSJfYmxhbmsifSAgICAgICB8IHRvIGVhc2lseSBsb2FkIGFuZCBzYXZlIGRhdGEgIApbcmVhZHJdKGh0dHBzOi8vcmVhZHIudGlkeXZlcnNlLm9yZy8pe3RhcmdldD0iX2JsYW5rIn0gICAgICB8IHRvIGltcG9ydCB0aGUgQ1NWIGZpbGUgZGF0YSAgCltkcGx5cl0oaHR0cHM6Ly9kcGx5ci50aWR5dmVyc2Uub3JnLyl7dGFyZ2V0PSJfYmxhbmsifSAgICAgIHwgdG8gYXJyYW5nZS9maWx0ZXIvc2VsZWN0L2NvbXBhcmUgc3BlY2lmaWMgc3Vic2V0cyBvZiB0aGUgZGF0YSAgCltza2ltcl0oaHR0cHM6Ly9jcmFuLnItcHJvamVjdC5vcmcvd2ViL3BhY2thZ2VzL3NraW1yL2luZGV4Lmh0bWwpe3RhcmdldD0iX2JsYW5rIn0gICAgICB8IHRvIGdldCBhbiBvdmVydmlldyBvZiBkYXRhICAgCltzdW1tYXJ5dG9vbHNdKGh0dHBzOi8vY3Jhbi5yLXByb2plY3Qub3JnL3dlYi9wYWNrYWdlcy9za2ltci9pbmRleC5odG1sKXt0YXJnZXQ9Il9ibGFuayJ9ICAgICAgfCB0byBnZXQgYW4gb3ZlcnZpZXcgb2YgZGF0YSBpbiBhIGRpZmZlcmVudCBzdHlsZSAgIApbcGRmdG9vbHNdKGh0dHBzOi8vY3Jhbi5yLXByb2plY3Qub3JnL3dlYi9wYWNrYWdlcy9wZGZ0b29scy9wZGZ0b29scy5wZGYpe3RhcmdldD0iX2JsYW5rIn0gICB8IHRvIHJlYWQgYSBQREYgaW50byBSICAgClttYWdyaXR0cl0oaHR0cHM6Ly9tYWdyaXR0ci50aWR5dmVyc2Uub3JnL2FydGljbGVzL21hZ3JpdHRyLmh0bWwpe3RhcmdldD0iX2JsYW5rIn0gICB8IHRvIHVzZSB0aGUgYCU8PiVgIHBpcHBpbmcgb3BlcmF0b3IgIApbcHVycnJdKGh0dHBzOi8vcHVycnIudGlkeXZlcnNlLm9yZy8pe3RhcmdldD0iX2JsYW5rIn0gICAgICB8IHRvIHBlcmZvcm0gZnVuY3Rpb25zIG9uIGFsbCBjb2x1bW5zIG9mIGEgdGliYmxlICAgClt0aWJibGVdKGh0dHBzOi8vdGliYmxlLnRpZHl2ZXJzZS5vcmcvKXt0YXJnZXQ9Il9ibGFuayJ9ICAgICB8IHRvIGNyZWF0ZSBkYXRhIG9iamVjdHMgdGhhdCB3ZSBjYW4gbWFuaXB1bGF0ZSB3aXRoICBkcGx5ci9zdHJpbmdyL3RpZHlyL3B1cnJyICAKW3RpZHlyXShodHRwczovL3RpZHlyLnRpZHl2ZXJzZS5vcmcvKXt0YXJnZXQ9Il9ibGFuayJ9ICAgICAgfCB0byBzZXBhcmF0ZSBkYXRhIHdpdGhpbiBhIGNvbHVtbiBpbnRvIG11bHRpcGxlIGNvbHVtbnMgCltnZ3Bsb3QyXShodHRwczovL2dncGxvdDIudGlkeXZlcnNlLm9yZy8pe3RhcmdldD0iX2JsYW5rIn0gICAgfCB0byBtYWtlIHZpc3VhbGl6YXRpb25zIHdpdGggbXVsdGlwbGUgbGF5ZXJzICAKCgpEbyBJIG5lZWQgdG8gdGFsayBhYm91dCBtYWNoaW5lIGxlYXJuaW5nIGluIGdlbmVyYWwgbW9yZS4uLiBjbGFzc2lmaWNhdGlvbiB2cyBwcmVkaWN0aW9uPw==